Repository navigation
Connecter l'utilisateur avec Google et par lien e-mail (E-10) #386
Description
Contexte
Epic : #6
Maquette : E-10 · validée le 2026-09-24 (D-023, D-025, D-028), revue par D-073 et D-074
Ecrans › E-10 · Compte-et-Monetisation · Architecture-Technique (Auth Firebase) · API › Conventions · E-10 · D-002, D-023, D-025, D-028, D-029, D-030, D-033, D-073, D-074, D-075
Issu du découpage de #38 (décision de Paul du 2026-10-13). L'app n'embarque encore aucun SDK Firebase ; ce ticket l'ajoute, avec la session utilisée par tous les écrans connectés (dont #387). Prérequis : la configuration Firebase (#384). Apple est porté par #388 (attend #289).
Comportement attendu
- SDK Firebase Auth dans l'app, fichiers de configuration lus selon le choix fait ici (variables de fichier EAS posées par Configurer Firebase Auth pour l'app (Google, lien e-mail, apps Android et iOS) #384, ou versionnés : clés publiques restreintes par bundle id) ; choix justifié dans la PR.
- Module de session dans
apps/mobile/src(état connecté ou anonyme, jeton courant, rafraîchissement, déconnexion), seul point d'accès au jeton pour le reste de l'app. - Sheet E-10 en overlay, sans croix, textes centrés, au vouvoiement (D-015) : bouton natif du SDK Google, « Continuer avec un e-mail » avec l'étape e-mail sur le clavier ; rappel de l'action en attente (« Connectez-vous pour enregistrer ce parcours », « Connectez-vous pour lancer ce parcours », D-033) ; réouverture après un déblocage sans compte (D-073).
- Lien magique : envoi, état « e-mail envoyé », ouverture du lien dans l'app, lien expiré, erreur de connexion (planche 2, D-025).
- Première connexion : prénom et CGU ; avec Google, prénom prérempli et étape facultative ; par e-mail, étape obligatoire (D-025).
- Reprise automatique de l'action en attente après connexion : favori, lancement d'un parcours (E-07 s'ouvre, D-029, D-033).
- Connecté, l'app envoie son jeton Firebase à
/routes/search; sur 401, elle rafraîchit le jeton et réessaie une fois ; le cache des résultats de recherche se vide à la connexion et à la déconnexion (D-075). - Mouvement (D-030) : M-05 pour la sheet, vibrations des actions clés, lus dans
mappings.motion. - Événements
auth_promptedetauth_completed(typés danspackages/shared/src/analytics.ts).
E-mail de connexion : écart à arbitrer. D-069 prévoit l'e-mail au modèle Widoo (E-22), envoyé par l'API via Brevo avec un lien Firebase généré par l'Admin SDK ; l'envoi est rattaché à #199 (langue des e-mails, v0.4), et la configuration Brevo à #246 (production). Aucun ticket ne porte encore la route d'API d'envoi. En attendant, l'e-mail est envoyé par Firebase directement (modèle Firebase) ; le passage à l'envoi par l'API reste à arbitrer par l'opérateur.
Critères d'acceptation
- Connexion Google et par lien e-mail réussies sur un build
previewAndroid, contre l'API staging - Le favori demandé avant connexion est ajouté après connexion sans action supplémentaire ; le parcours lancé sans compte démarre (E-07) après connexion
- États de la planche 2 de E-10 conformes à Ecrans › E-10 : e-mail envoyé, première connexion (Google et e-mail), erreur, lien expiré
- Tous les textes visibles sont au vouvoiement
- Captures à 150 % de texte système de E-10 dans la PR, conformes à la planche 3 : sheet plus haute que l'écran qui défile, bouton collé en bas ; « Continuer avec un e-mail » en
Button isDense, aucun plafond posé dans l'écran - Libellés VoiceOver et TalkBack de E-10 conformes à la planche 3
- Durées, courbes et vibrations lues dans
mappings.motion, aucune valeur en dur ; « Réduire les animations » respecté (D-030) - Émet
auth_promptedà l'ouverture de la sheet etauth_completedà la connexion réussie - Connecté, l'app envoie son jeton à
/routes/search; sur 401, elle rafraîchit et réessaie une fois ; le cache des résultats se vide à la connexion et à la déconnexion (D-075), test unitaire - Aucun jeton dans les journaux, Sentry ou PostHog
Notes techniques
- Composants de base partagés avec Construire mon profil (E-09), Modifier le profil, Réglages et suppression de compte #387 (toast, barre du haut) : le premier des deux qui part les crée dans
apps/mobile/src/ui, l'autre les réutilise. - Authentification et session : revue OWASP (A07) et niveau de risque à annoncer dans la PR.
Activity
PaulThiberville commentedon Oct 13, 2026
📋 MANAGER (2026-10-13) : l'envoi du lien de connexion par l'API via Brevo (D-069) a maintenant son ticket, #397 (
needs-design, v0.4, arbitrage d'Ilan : Brevo, ou Firebase pour le MVP). Ce ticket garde l'envoi par Firebase direct en attendant ; s'il est retenu, #397 basculera l'app sur l'API.PaulThiberville commentedon Oct 13, 2026
Note — configuration Firebase prête (#384 fermé)
La configuration Firebase de staging est faite (vérification consignée sur #384 (comment)) :
widoo-staging, apps Android et iOSapp.widooenregistrées ;@inprogress-agency-team/widoo, environnementspreviewetdevelopment) :GOOGLE_SERVICES_JSONetGOOGLE_SERVICE_INFO_PLIST(fichiers, sensitive),EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID(plaintext).Point à vérifier par CODE : l'option « Lien par e-mail (connexion sans mot de passe) » du fournisseur E-mail/Mot de passe n'a pas été confirmée. Au premier envoi d'un lien magique contre staging, vérifier que Firebase l'accepte (une erreur
auth/operation-not-allowedsignale l'option désactivée) ; dans ce cas, le signaler à Paul, qui coche l'option dans la console, plutôt que de contourner dans le code.PaulThiberville commentedon Oct 13, 2026
Mise à jour du 2026-10-13 : Paul déclare que l'option « Lien par e-mail (connexion sans mot de passe) » est cochée dans Firebase (voir #384). Le point à vérifier de la note précédente devient un simple contrôle de recette : une erreur
auth/operation-not-allowedserait à signaler à Paul.PaulThiberville commentedon Oct 14, 2026
🔨 Démarrage — plan :
@react-native-firebase/app+auth, SDK natifs) et@react-native-google-signin/google-signinpour le bouton Google natif. Le SDK JS de Firebase est écarté : ses requêtes ne portent pas l'identité de l'app (paquet Android, bundle iOS), ce qui casse les clés restreintes par bundle id que le wiki exige.app.config.tslit les variables de fichier EASGOOGLE_SERVICES_JSONetGOOGLE_SERVICE_INFO_PLIST, ou, en local,apps/mobile/firebase/(ignoré par git). Rien n'est versionné. Un build EAS sans ces fichiers échoue tout de suite.apps/mobile/src/auth) : état connecté ou anonyme, seul point d'accès au jeton, donné au client d'API, avec rafraîchissement et un seul réessai sur 401 (déjà dans@widoo/api-client). Cache de recherche vidé à la connexion et à la déconnexion (D-075).<projet>.firebaseapp.com/__/auth/links(App Links Android, domaines associés iOS), intercepté par+native-intent.auth_promptedetauth_completed.Une seule PR, plusieurs commits, niveau 2.
PaulThiberville commentedon Oct 14, 2026
Fermé par la fusion de #399 (Fixes #386) ; la fermeture automatique n'a pas eu lieu. Consigné le 2026-10-14 sur demande de Paul.