Военнослужащих подтверждение по электронной почте не отправляются


Я успешно настроил аутентификацию Firebase по электронной почте / паролю, но по соображениям безопасности я хочу, чтобы пользователь подтвердил свою электронную почту. На сайте Firebases написано:

Когда пользователь регистрируется с использованием адреса электронной почты и пароля, отправляется электронное письмо с подтверждением для подтверждения его адреса электронной почты.

Но когда я регистрируюсь, я не получаю подтверждение по электронной почте.

Я искал и могу найти только код для отправки электронной почты сброса пароля, но не код для отправки подтверждение по электронной почте.

Я посмотрел здесь:

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

Кто-нибудь знает, как я могу это сделать?

4 41

4 ответа:

Я заметил, что новый Firebase email authentication docs не задокументирован должным образом.

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

Обратите внимание, что:

  1. Вы можете только отправлять проверку электронной почты пользователям объекта, который вы создали с помощью метода Email & Password createUserWithEmailAndPassword
  2. только после того, как вы подписали пользователями в подлинности государства, военнослужащих вернутся обещание объекта авт.
  3. старый метод onAuth был изменен на onAuthStateChanged .

Чтобы проверить, проверена ли электронная почта:

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

После создания пользователя возвращается объект пользователя, в котором можно проверить, была ли проверена электронная почта пользователя.

Когда пользователь не был проверен, вы можете запустить метод sendEmailVerification на самом объекте пользователя.

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);
    });

Вы также можете проверить, прослушивая AuthState, проблема со следующим методом заключается в том, что с каждым новым сеансом (путем обновления страницы), отправляется новое письмо.

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

Вы можете отправить проверочное письмо и проверить, было ли оно проверено следующим образом в 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]
        }
    };

Если вы используете compile " com.гугл.firebase: firebase-auth: 9.2.0 " и компиляции в COM.гугл.firebase: firebase-core: 9.2.0 ' метод sendEmailVerification () не будет разрешен, пока вы не обновите его до версии 9.8.0 или выше. Он потратил большую часть времени, прежде чем я понял это.