【问题标题】:Firebase isEmailVerified returns false even after verifying email即使在验证电子邮件后,Firebase isEmailVerified 也会返回 false
【发布时间】:2017-03-31 09:29:06
【问题描述】:

我发送电子邮件验证并单击链接。然后我在FirebaseUser 对象上调用isEmailVerified()。这总是返回null,可能是什么原因?

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    您应该在验证后刷新用户对象,如下所示:

    usertask = mAuth.getCurrentUser().reload();
    usertask.addOnSuccessListener(new OnSuccessListener() {
    @override
    public void onSuccess(Void aVoid) {
    user = mAuth.getCurrentUser();
    boolean useremailveri = user.isEmailVerified();
    String useremailuid = user.getUid();
    }
    });
    

    【讨论】:

      【解决方案2】:

      首先你必须调用这个方法:signInWithEmailAndPassword,在用户验证他们的电子邮件后至少1次......

      只有在那之后,你才会得到 isEmailVerified() 作为true

      【讨论】:

        【解决方案3】:

        isEmailVerified() 更改为emailVerified;

        【讨论】:

        • 此方法在 FirebaseUser 中不可用
        【解决方案4】:

        如果电子邮件已被验证,则重新验证更新的用户...

        https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user

        【讨论】:

          【解决方案5】:

          与@yehyatt 的解决方案相同,但更简单。使用 firebase 登录用户,刷新用户,然后检查用户是否已通过验证。

          1. 让用户登录

             Auth.auth().signIn(withEmail: YourEMail, password: YourPassword) { result, error in
                 if error != nil {
                     logInErrorReason = "\(error!.localizedDescription)"
                     // An error ocurred
                 }else {
                     // Handle successful login.
                 }
             }
            
          2. 刷新当前用户:

            Auth.auth().currentUser?.reload(completion: ((Error?) -> Void)?)

          3. 检查他是否登录:

            if Auth.auth().currentUser?.isEmailVerified == true { // 处理成功验证}

          【讨论】:

            【解决方案6】:

            我认为您需要先使用signInWithEmailAndPassword 使用用户的电子邮件和密码登录,然后尝试拨打isEmailVerified() 返回用户的方法。

            【讨论】:

            • 没必要。如果创建了新帐户,则该用户也已登录。正如@yehyatt 所说,您只需要重新加载当前用户即可。
            【解决方案7】:

            isEmailVerified 应该提供正确的响应,但是您可能使用不正确。

            1. 如果用户验证了他的电子邮件(他/她收到了来自 firebase 的电子邮件,并点击了“验证电子邮件”链接),那么它将返回 true;
            2. 如果用户没有验证他的电子邮件 - 它将返回 false

            因此,此问题的解决方案是更新您的注册流程。 当您创建新用户时,您还应该发出一个命令来启动电子邮件验证过程await user.sendEmailVerification();

            一旦您的用户将收到一封电子邮件并将对其进行验证。你的方法:user.isEmailVerified 将返回 true

            您的注册过程应如下所示:

                AuthResult result = await _auth.createUserWithEmailAndPassword(
                    email: email,password: password); 
                FirebaseUser user = result.user;
                await user.sendEmailVerification();
            

            【讨论】:

              【解决方案8】:
              1. 使用 createUserWithEmailAndPassword 创建新用户
              2. 让它使用 sendEmailVerification 将验证链接发送到您的 gmail
              3. 去你自己的gmail,你会看到验证链接,然后点击 在那个链接上
              4. 尝试使用用户名和电子邮件登录

              您将看到您自己的帐户已经过验证,可以继续下一个设置

              https://github.com/FirebaseExtended/flutterfire/issues/2208

              【讨论】:

                猜你喜欢
                • 2020-03-28
                • 2020-06-29
                • 1970-01-01
                • 1970-01-01
                • 2022-01-09
                • 1970-01-01
                • 2021-08-22
                • 1970-01-01
                • 2017-10-01
                相关资源
                最近更新 更多