Skip to content

Connecter l'utilisateur avec Google et par lien e-mail (E-10) #386

Closed

Description

@PaulThiberville

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_prompted et auth_completed (typés dans packages/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 preview Android, 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 et auth_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

Activity

  1. added this to the v0.3 milestone on Oct 13, 2026
  2. added
    status:readySpec complète, prêt à coder
    and removed
    status:blockedBloqué, voir commentaire ⛔
    on Oct 13, 2026
  3. added
    status:blockedBloqué, voir commentaire ⛔
    and removed
    status:readySpec complète, prêt à coder
    on Oct 13, 2026
  4. PaulThiberville commented on Oct 13, 2026

    @PaulThiberville
    CollaboratorAuthor

    📋 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.

  5. PaulThiberville commented on Oct 13, 2026

    @PaulThiberville
    CollaboratorAuthor

    Note — configuration Firebase prête (#384 fermé)

    La configuration Firebase de staging est faite (vérification consignée sur #384 (comment)) :

    • projet widoo-staging, apps Android et iOS app.widoo enregistrées ;
    • variables EAS (projet @inprogress-agency-team/widoo, environnements preview et development) : GOOGLE_SERVICES_JSON et GOOGLE_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-allowed signale 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.

  6. added
    status:readySpec complète, prêt à coder
    and removed
    status:blockedBloqué, voir commentaire ⛔
    on Oct 13, 2026
  7. PaulThiberville commented on Oct 13, 2026

    @PaulThiberville
    CollaboratorAuthor

    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-allowed serait à signaler à Paul.

  8. PaulThiberville commented on Oct 14, 2026

    @PaulThiberville
    CollaboratorAuthor

    🔨 Démarrage — plan :

    • SDK : React Native Firebase (@react-native-firebase/app + auth, SDK natifs) et @react-native-google-signin/google-signin pour 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.
    • Fichiers Firebase : app.config.ts lit les variables de fichier EAS GOOGLE_SERVICES_JSON et GOOGLE_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.
    • Session (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).
    • Sheet E-10 : choix, étape e-mail, e-mail envoyé, première connexion, erreur, lien expiré, plus le toast « Nouveau lien envoyé ».
    • Lien e-mail : domaine <projet>.firebaseapp.com/__/auth/links (App Links Android, domaines associés iOS), intercepté par +native-intent.
    • Action en attente : rejouée après la connexion. « C'est parti » demande désormais un compte. Le favori a le mécanisme, mais pas d'endpoint avant Ajouter favoris, partage par lien et deep links #39.
    • Événements : auth_prompted et auth_completed.

    Une seule PR, plusieurs commits, niveau 2.

  9. PaulThiberville commented on Oct 14, 2026

    @PaulThiberville
    CollaboratorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions