73 votes

L'e-mail de confirmation de Firebase n'est pas envoyé

J'ai mis en place avec succès l'authentification par email/mot de passe de Firebase, mais pour des raisons de sécurité, je veux que l'utilisateur confirme son email. C'est écrit sur le site de Firebase :

Lorsqu'un utilisateur s'inscrit en utilisant une adresse électronique et un mot de passe, un courriel de confirmation est envoyé pour vérifier son adresse électronique.

Mais lorsque je m'inscris, je ne reçois pas d'e-mail de confirmation.

J'ai cherché et je n'ai trouvé qu'un code pour envoyer l'e-mail de réinitialisation du mot de passe, mais pas un code pour envoyer l'e-mail de confirmation.

J'ai regardé ici :

https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email

Quelqu'un a une idée de la façon dont je peux le faire ?

2 votes

Vous avez créé un lien vers la documentation iOS, mais la réponse acceptée utilise JavaScript. Laquelle utilisez-vous (afin que je puisse modifier la question en fonction de la plate-forme utilisée) ?

0 votes

Je n'arrive pas à trouver .sendEmailVerification() dans la version Android. Quelqu'un a-t-il réussi à utiliser la vérification d'email dans Firebase sur Android ?

0 votes

firebase.google.com/support/releases API manquante pour démarrer le flux de vérification des emails.

130voto

Xavier J. Wong Points 981

J'ai remarqué que la nouvelle documentation sur l'authentification par email de Firebase n'est pas correctement documentée.

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});

Notez bien que :

  1. Vous ne pouvez envoyer une vérification par e-mail qu'aux utilisateurs dont l'objet a été créé par la méthode Email&Password. createUserWithEmailAndPassword
  2. Seulement après avoir signé les utilisateurs dans l'état authentifié, Firebase retournera une promesse de l'objet auth.
  3. L'ancienne méthode onAuth a été modifiée en onAuthStateChanged .

Pour vérifier si l'email est vérifié :

firebase.auth().onAuthStateChanged(function(user) { 
  if (user.emailVerified) {
    console.log('Email is verified');
  }
  else {
    console.log('Email is not verified');
  }
});

0 votes

Merci, je cherchais cette réponse. Savez-vous comment vérifier si l'e-mail a été confirmé ?

2 votes

Firebase.auth().onAuthStateChanged(function(user) { (user.emailVerified) ? console.log('Email is verified') : console.log('Email is not verified') }) ;

0 votes

Merci, cela a été très utile :)

13voto

tdhulster Points 698

Après la création d'un utilisateur, un objet Utilisateur est retourné, où vous pouvez vérifier si l'email de l'utilisateur a été vérifié ou non.

Lorsqu'un utilisateur n'a pas été vérifié, vous pouvez déclencher la méthode sendEmailVerification sur l'objet utilisateur lui-même.

firebase.auth()
    .createUserWithEmailAndPassword(email, password)
    .then(function(user){
      if(user && user.emailVerified === false){
        user.sendEmailVerification().then(function(){
          console.log("email verification sent to user");
        });
      }
    }).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;

      console.log(errorCode, errorMessage);
    });

Vous pouvez également vérifier en écoutant l'AuthState, le problème avec la méthode suivante est, qu'à chaque nouvelle session (en rafraîchissant la page), un nouvel email est envoyé.

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});

3 votes

sendEmailVerification() après createUserWithEmailAndPassword ne fonctionne pas. À ce moment-là user.emailVerfied es undefined . L'envoi d'un courriel devrait toujours se faire onAuthStateChanged

5 votes

Le rappel pour createUserWithEmailAndPassword(...).then reçoit un firebase.auth.UserCredential et non un firebase.User . Il suffit d'utiliser then(credential => credential.user.emailVerified ... ) à la place.

2 votes

@Andy : Selon le Doc Firebase ici J'utilise then((userRecord) => { userRecord.user.sendEmailVerification()... }) mais il est dit Cannot read property 'sendEmailVerification' of undefined .

5voto

Pablo Prado Points 51

Vous pouvez envoyer un courriel de vérification et vérifier si la vérification a été effectuée comme suit dans l'AuthListener :

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();

            if (user != null) {

//---- HERE YOU CHECK IF EMAIL IS VERIFIED

                if (user.isEmailVerified()) {
                    Toast.makeText(LoginActivity.this,"You are in =)",Toast.LENGTH_LONG).show();
                } 

                else {

//---- HERE YOU SEND THE EMAIL

                    user.sendEmailVerification();
                    Toast.makeText(LoginActivity.this,"Check your email first...",Toast.LENGTH_LONG).show();
                }

            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
            // [START_EXCLUDE]
            updateUI(user);
            // [END_EXCLUDE]
        }
    };

2voto

MbaiMburu Points 155

Si vous utilisez compile "com.google.firebase:firebase-auth:9.2.0" et compile 'com.google.firebase:firebase-core:9.2.0', la méthode sendEmailVerification() ne sera pas résolue tant que vous n'aurez pas effectué une mise à jour vers la version 9.8.0 ou supérieure. J'ai perdu beaucoup de temps avant de trouver la solution.

1voto

David Innocent Points 3

Je me suis penché sur la question également. Il semble que Firebase a changé la façon dont vous envoyez la vérification. Pour moi

user.sendEmailVerification() 

n'a pas fonctionné. Si vous obtenez une erreur telle que user.sendEmailVerification() n'existe pas. utilisez ce qui suit.

firebase.auth().currentUser.sendEmailVerification()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X