Подтвердить что ты не робот

Не отправлено письмо с подтверждением пожарной базы

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Я заметил, что новые документы проверки подлинности электронной почты Firebase неправильно документированы.

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

Заметьте, что:

  • Вы можете отправлять по электронной почте только те объекты, которые вы создали с помощью метода Email & Password createUserWithEmailAndPassword
  • Только после того, как вы подписали пользователей в аутентифицированное состояние, Firebase вернет обещание объекта auth.
  • Старый метод onAuth был изменен на onAuthStateChanged.

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

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

Ответ 2

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

Если пользователь не был проверен, вы можете инициировать метод 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(); 
});

Ответ 3

Вы можете отправить подтверждение электронной почты и проверить, было ли это подтверждено, как указано в 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

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

Ответ 5

Я тоже смотрю на это. Похоже, что Firebase изменили способ отправки проверки. для меня

user.sendEmailVerification() 

не сработало. Если вы получаете сообщение об ошибке, например user.sendEmailVerification(), не существует. используйте следующее.

firebase.auth().currentUser.sendEmailVerification()