Browse Source

Taak 130-D/E: Drupal-code voor social login in de app is klaar

Callback + claim-resource geschreven, php -l schoon op PHP 8.1.
Besluiten B (automatisch account op geverifieerd e-mailadres) en
C (geen Apple, Play-only) vastgelegd.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 12 hours ago
parent
commit
87eeee41c6
1 changed files with 5 additions and 5 deletions
  1. 5 5
      TASKS.md

+ 5 - 5
TASKS.md

@@ -1822,11 +1822,11 @@ OneAll als client. Er verandert dus niets aan de Facebook-instellingen van de si
 | # | Wie | Wat |
 |---|---|---|
 | **130-A** | Bob | Upgrade naar Personal Advanced + controleer dat `uitgaanskrant.com` bij de allowed domains staat |
-| **130-B** | Bob | **Besluit:** wat gebeurt er met een *nieuwe* gebruiker? `registration_method` staat op `manual`, dus die krijgt nu een Drupal-registratieformulier i.p.v. een sessie. Kiezen: automatisch account op het geverifieerde e-mailadres, of terugsturen met "maak eerst een account aan". (`registration_auto_link = enable`, dus een bestaand account met hetzelfde e-mailadres wordt sowieso gekoppeld) |
-| **130-C** | Bob | **Besluit:** iOS. App Store-richtlijn 4.8 eist bij third-party login een gelijkwaardig privacyvriendelijk alternatief. Apple staat **niet** in de providerlijst van de D7-module (aan: facebook, github, google, twitter, windowslive). Voor Play speelt dit niet |
-| **130-D** | Claude schrijft, Bob deployt | `custom.social_login_app.inc`: callback-pagina die de token inwisselt (zelfde API-call als `social_login_core.module` regel ~290), inlogt en de sessie onder de `state` wegschrijft + een "je kunt terug naar de app"-pagina toont |
-| **130-E** | Claude schrijft, Bob deployt | Claim-resource `POST /flutterdrup/app_social_login/claim.json` → geeft **exact het antwoordformaat van `user/login.json`** terug (`sessid`, `session_name`, `token`, `user.uid/name/mail`), zodat de app-kant een kopie van `drupalLogin` is |
-| **130-F** | Bob | Resource aanzetten in het endpoint — **inclusief de losse operatie eronder**, anders blijft het 404 (bekende valkuil, zie `CLAUDE.md`). Daarna curl-test |
+| **130-B** | ✅ **Besloten 2026-09-21** | **Automatisch account aanmaken.** De callback maakt zelf een Drupal-account op het *geverifieerde* e-mailadres van het netwerk; zonder geverifieerd e-mailadres weigeren we. Gebruikersnaam afleiden en op uniciteit controleren. `registration_method = manual` in de module blijft ongemoeid — dat geldt alleen voor de website |
+| **130-C** | ✅ **Besloten 2026-09-21** | **Geen iOS op korte termijn** → Apple-login overslaan. Play kent geen tegenhanger van richtlijn 4.8. De provider is een parameter in de URL, dus later bijzetten raakt de app-kant niet. Blijft open punt zodra iOS aan de beurt komt |
+| **130-D** | ✅ **Code klaar** (2026-09-21), Bob deployt | `custom.social_login_app.inc` — callback die de token inwisselt (hergebruikt `social_login_core_get_settings()` / `_do_api_request()` / `_get_user_for_user_token()` / `_get_uid_for_email()` / `_map_identity_token_to_user_token()`), inlogt met `user_login_finalize()` en de sessie onder de `state` in de cache-bin legt (TTL 5 min, eenmalig). `php -l` schoon op PHP 8.1. Staat in `~/tmp/` op aegir-o1 |
+| **130-E** | ✅ **Code klaar** (2026-09-21), Bob deployt | `POST /flutterdrup/app_social_login/claim.json` → `{status: pending\|ok\|error}`; bij `ok` staan `sessid`/`session_name`/`token`/`user` erin als bij `user/login.json`, maar met een **klein** user-object (uid/name/mail) — geen volledig object in een anoniem claimbaar antwoord. Access callback `_custom_social_app_claim_access()` (TRUE, huispatroon van `custom_plaatsen_access`) |
+| **130-F** | Bob | Plaatsen + aanzetten + testen. **Stap-voor-stap in `~/tmp/130-drupal-instructies.md` op aegir-o1**, inclusief 4 curl-tests. ⚠️ De `callback_uri` moet de **`/nl/`-prefix** hebben (de site draait op `pathPrefix: nl/`, de widget op /nl/user doet het ook zo) |
 | **130-G** | Claude | Custom action `socialLoginStart(provider)`: state genereren, Custom Tab openen, pollen, App State vullen (`userSessionid`, `userSessionname`, `userToken`, `userName`, `userUid`, `userMail`), tab sluiten. Timeout ~3 min |
 | **130-H** | Claude | Knoppen op `lib/login/login/login_widget.dart` onder het bestaande formulier |
 | **130-I** | Claude | Vertalingen (P1-17-patroon: globe per widget) |