Firebase确认电子邮件未发送

Ben*_*906 46 firebase firebase-authentication

我已成功设置Firebase电子邮件/密码身份验证,但出于安全考虑,我希望用户确认她/他的电子邮件.它在Firebases网站上说:

当用户使用电子邮件地址和密码注册时,会发送确认电子邮件以验证其电子邮件地址.

但是当我注册时,我没有收到确认电子邮件.

我看过,只能找到发送密码重置电子邮件的代码,但不能找到发送电子邮件确认的代码.

我看过这里:

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

有谁知道我怎么做?

Xav*_*ong 102

我注意到新的Firebase电子邮件身份验证文档未正确记录.

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});
Run Code Online (Sandbox Code Playgroud)

请注意:

  1. 您只能使用电子邮件和密码方法createUserWithEmailAndPassword向您创建的用户对象发送电子邮件验证
  2. 只有在您将用户签名为经过身份验证的状态后,Firebase才会返回auth对象的承诺.
  3. 旧的onAuth方法已更改为onAuthStateChanged.

检查电子邮件是否已经过验证:

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

  • @FrankvanPuffelen仍然不在文档中.在auth电子邮件模板页面中很好地说明了,但除了这个答案之外,它上面没有任何文档. (4认同)
  • firebase.auth()onAuthStateChanged(功能(用户){(user.emailVerified)的console.log( '电子邮件被验证'):的console.log( '电子邮件没有被证实')}). (2认同)

Hus*_* Hn 12

确认电子邮件可能位于您的垃圾邮件文件夹中。检查您的垃圾邮件文件夹。

  • ‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️ (2认同)

tdh*_*ter 7

创建用户后,将返回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);
    });
Run Code Online (Sandbox Code Playgroud)

您还可以通过收听AuthState进行检查,以下方法存在的问题是,每次新会话(通过刷新页面)都会发送新的电子邮件.

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});
Run Code Online (Sandbox Code Playgroud)

  • `createUserWithEmailAndPassword` 后的 `sendEmailVerification()` 不起作用。那时`user.emailVerfied` 是`undefined`。发送电子邮件应该总是发生`onAuthStateChanged` (3认同)
  • createUserWithEmailAndPassword(...)。then的回调收到一个firebase.auth.UserCredential,而不是firebase.User。只需使用`then(credential => credential.user.emailVerified ...)`即可。 (3认同)
  • @Andy:根据[Firebase 文档](https://firebase.google.com/docs/auth/admin/manage-users#create_a_user),我使用 `then((userRecord) => { userRecord.user. sendEmailVerification()... })`,但它说“无法读取未定义的属性‘sendEmailVerification’”。 (2认同)

小智 5

您可以发送验证电子邮件并检查是否已按以下方式验证到 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]
        }
    };
Run Code Online (Sandbox Code Playgroud)