web-dev-qa-db-fra.com

Email de confirmation de Firebase non envoyé

J'ai configuré l'authentification de messagerie/mot de passe Firebase avec succès, mais pour des raisons de sécurité, je souhaite que l'utilisateur confirme son courrier électronique. On dit sur le site de Firebases:

Lorsqu'un utilisateur s'inscrit à l'aide d'une adresse électronique et d'un mot de passe, un courrier électronique de confirmation lui est envoyé pour vérifier son adresse électronique.

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

J'ai regardé et je ne trouve qu'un code pour l'envoi du courrier électronique de réinitialisation du mot de passe, mais pas un code pour l'envoi de la confirmation par courrier électronique.

J'ai regardé ici:

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

quelqu'un at-il un indice sur la façon dont je peux le faire?

45
Benja0906

J'ai remarqué que la nouvelle documentation d'authentification de la messagerie Firebase n'est pas correctement documentée.

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

Notez que:

  1. Vous ne pouvez envoyer une vérification de courrier électronique qu'aux objets d'utilisateurs que vous avez créés à l'aide de la méthode Email & Password createUserWithEmailAndPassword
  2. Firebase ne renverra une promesse de l’objet auth que lorsque vous aurez authentifié les utilisateurs.
  3. L'ancienne méthode onAuth a été remplacée par onAuthStateChanged.

Pour vérifier si le courrier électronique est vérifié:

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

Après la création d'un utilisateur, un objet Utilisateur est renvoyé, dans lequel vous pouvez vérifier si le courrier électronique 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 AuthState que le problème avec la méthode suivante est qu’à chaque nouvelle session (en actualisant la page), un nouveau courrier électronique est envoyé.

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

Vous pouvez envoyer un email de vérification et vérifier si a été vérifié comme suit dans 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]
        }
    };
4
Pablo Prado

si vous utilisez la compilation "com.google.firebase: firebase-auth: 9.2.0" et la compilation "com.google.firebase: firebase-core: 9.2.0", la méthode sendEmailVerification () ne sera pas résolue avant la mise à jour. à 9.8.0 ou plus. Il a perdu la plupart du temps avant que je l'ai compris.

2
MbaiMburu