首页 文章

Firebase确认电子邮件未发送

提问于
浏览
42

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

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

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

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

我看过这里:

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

有谁知道我怎么做?

4 回答

  • 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]
            }
        };
    
  • 90

    如果您使用编译“com.google.firebase:firebase-auth:9.2.0”并编译“com.google.firebase:firebase-core:9.2.0”,则在您更新之前,方法sendEmailVerification()将无法解析到9.8.0或更高 . 在我弄明白之前,大部分时间浪费了 .

  • 4

    创建用户后,将返回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(); 
    });
    
  • 2

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

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

    请注意:

    • 您只能使用电子邮件和密码方法 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');
      }
    });
    

相关问题