Firebase确认电子邮件未发送

时间:2016-05-25 08:01:21

标签: firebase firebase-authentication

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

  

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

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

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

我看过这里:

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

任何人都知道如何做到这一点?

7 个答案:

答案 0 :(得分:94)

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

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

请注意:

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

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

答案 1 :(得分:6)

创建用户后,将返回用户对象,您可以在其中检查用户的电子邮件是否已经过验证。

当用户未经过验证时,您可以在用户对象本身上触发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 :(得分:4)

您可以发送验证电子邮件并检查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]
        }
    };

答案 3 :(得分:2)

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

答案 4 :(得分:0)

我也一直在看这个。好像Firebase改变了您发送验证的方式。对我来说

user.sendEmailVerification() 

不起作用。 如果出现错误,例如user.sendEmailVerification()不存在。 使用以下内容。

firebase.auth().currentUser.sendEmailVerification()

答案 5 :(得分:0)

您可以向任何与Firebase Auth帐户链接的用户发送验证电子邮件。例如,在Flutter中,您可以这样做。像:

Future<void> signInWithCredentialAndLinkDetails(AuthCredential authCredential,
    String email, String password) async {
  // Here authCredential is from Phone Auth
  _auth.signInWithCredential(authCredential).then((authResult) async {
    if (authResult.user != null) {
      var emailAuthCredential = EmailAuthProvider.getCredential(
        email: email,
        password: password,
      );
      authResult.user
          .linkWithCredential(emailAuthCredential)
          .then((authResult,onError:(){/* Error Logic */}) async {
        if (authResult.user != null) {
          await authResult.user.sendEmailVerification().then((_) {
            debugPrint('verification email send');
          }, onError: () {
            debugPrint('email verification failed.');
          });
        }
      });
    }
  });
}

答案 6 :(得分:0)

这不是问题的答案,但可能会帮助某人。 不要忘记将您的站点域添加到登录方法下的授权域列表