android Firebase isEmailVerified即使在验证电子邮件后也返回false

whhtz7ly  于 2023-05-12  发布在  Android
关注(0)|答案(9)|浏览(100)

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

zaq34kh6

zaq34kh61#

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

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();
}
});
byqmnocz

byqmnocz2#

首先你需要调用这个方法:signInWithEmailAndPassword,用户验证其电子邮件后至少1次....
只有在此之后,您才会得到**isEmailVerified()**作为true

zc0qhyus

zc0qhyus3#

isEmailVerified()更改为emailVerified;

r55awzrz

r55awzrz4#

如果电子邮件已验证,则重新验证更新的用户...
https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user

sz81bmfz

sz81bmfz5#

与@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.
     }
 }

1.刷新当前用户:
Auth.auth().currentUser?.reload(完成:((Error?)-> Void)?)
1.检查他是否已登录:
if Auth.auth().currentUser?.isEmailVerified == true { //处理验证成功}

polkgigr

polkgigr6#

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

ca1c2owp

ca1c2owp7#

isEmailVerified应该提供正确的响应,但您可能使用不当。
1.如果用户验证了他的电子邮件(他/她收到了一封来自Firebase的电子邮件,并点击了“验证电子邮件”链接),那么它将返回true;
1.如果用户没有验证他的电子邮件-它将返回false
因此,解决这个问题的方法是更新您的注册流程。当您创建新用户时,您还应该发出命令以启动电子邮件验证过程await user.sendEmailVerification();
一旦您的用户将收到一封电子邮件,并将验证它。您的方法:user.isEmailVerified将返回true
您的注册过程应该是这样的:

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

nom7f22z8#

1.使用createUserWithEmailAndPassword创建新用户
1.让它使用sendEmailVerification将验证链接发送到您的gmail
1.去你自己的gmail,你会看到验证链接,只需点击该链接
1.请输入用户名和电子邮件地址
您将看到您自己的帐户已经验证,并可以继续下一个setps
https://github.com/FirebaseExtended/flutterfire/issues/2208

ax6ht2ek

ax6ht2ek9#

我用这样的东西。如果本地值为true,则返回本地值(因为一旦验证,就永远不会取消验证),否则刷新用户并返回更新后的值。

var isEmailVerified: Bool {
    get async {
        if Auth.auth().currentUser?.isEmailVerified == true {
            return true
        }
        
        try? await Auth.auth().currentUser?.reload()
        return Auth.auth().currentUser?.isEmailVerified == true
    }
}

相关问题