Lorsqu'un utilisateur s'inscrit dans mon application, il reçoit un e-mail de vérification. L'écouteur onAuthStateChanged
est appelé lorsqu'un utilisateur est créé en utilisant createUserWithEmailAndPassword
mais pas après que l'e-mail a été vérifié.
J'ai une classe distincte qui gère toutes les authentifications. La méthode suivante consiste à inscrire l'utilisateur
FirebaseAuth.instance.onAuthStateChanged.listen((user) { print("Auth State Changed!"); if (user.isEmailVerified) { print("EMail verified!"); } }
Cette méthode est appelée dans mon StatefulWidget en utilisant cette méthode
void _signUpUser() async { try { await Auth().signUpUser(_email, _password) ..sendEmailVerification(); } catch (e) { print(e.toString()); } }
Et onAuthStateChanged est configuré dans la méthode initState
de mon StatefulWidget
Future<FirebaseUser> signUpUser(email, password) async { final FirebaseUser user = await _auth.createUserWithEmailAndPassword(email: email, password: password); assert (user != null); assert (await user.getIdToken() != null); return user; }
4 Réponses :
onAuthStatechanged
est déclenché uniquement en cas de connexion ou de déconnexion de l'utilisateur et non lors de la vérification de l'e-mail.
Selon Doc - p >
onAuthStatechanged
Ajoute un observateur pour les modifications de l'état de connexion de l'utilisateur.
L'observateur sera déclenché dans les scénarios suivants:
Lorsque auth (). onAuthStateChanged () est appelé pour la première fois. Il se déclenchera avec l'état initial d'Auth. Si l'utilisateur revient d'un auth (). signInWithRedirect (), l'observateur attendra cela opération à résoudre avant le déclenchement initial.
Lorsqu'un nouvel utilisateur se connecte.
Lorsqu'un utilisateur déjà connecté se déconnecte.
Mais comment est-il alors possible d'être averti lorsque l'utilisateur a vérifié son email?
Vous pouvez forcer le rechargement du jeton d'identification, ce qui vous donnera la nouvelle valeur. Je ne sais jamais si User.reload code>
suffit, ou si vous devez appeler getIdToken (true)
avant cela.
Pour le moment, je propose un bouton pour «terminer la validation des e-mails». Cela appelle User.reload - donc cela semble être suffisant pour le commentaire de @Frank van Puffelen ci-dessus. C'est beaucoup moins satisfaisant que d'obtenir un événement de mise à jour de statut; Je peux implémenter une boucle pour vérifier l'état pendant une période après l'envoi d'un e-mail afin que l'application passe automatiquement.
Utilisez la fonction where:
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance; Stream<FirebaseUser> get onAuthStateChanged { return _firebaseAuth.onAuthStateChanged.where((user)=> user.isEmailVerified); }
Vous pouvez simplement faire un firebase.auth (). signOut après avoir envoyé le lien de vérification par e-mail. Et lorsque l'utilisateur clique à nouveau sur la connexion, il se déclenche automatiquement surAuthStateChanged.
Y a-t-il quelque chose dans la documentation indiquant que l'utilisateur sera automatiquement connecté lorsque l'e-mail est vérifié? En outre, il se pourrait peut-être que l'authStatechanged ne soit appelé qu'une seule fois, après l'enregistrement, lorsque l'e-mail ne sera toujours pas vérifié et que l'utilisateur devra fermer et ouvrir l'application.
stackoverflow.com/a/58039313/10511266 peut vous aider.