【发布时间】:2017-03-31 09:29:06
【问题描述】:
我发送电子邮件验证并单击链接。然后我在FirebaseUser 对象上调用isEmailVerified()。这总是返回null,可能是什么原因?
【问题讨论】:
标签: android firebase firebase-authentication
我发送电子邮件验证并单击链接。然后我在FirebaseUser 对象上调用isEmailVerified()。这总是返回null,可能是什么原因?
【问题讨论】:
标签: android firebase firebase-authentication
您应该在验证后刷新用户对象,如下所示:
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();
}
});
【讨论】:
首先你必须调用这个方法:signInWithEmailAndPassword,在用户验证他们的电子邮件后至少1次......
只有在那之后,你才会得到 isEmailVerified() 作为true
【讨论】:
将isEmailVerified() 更改为emailVerified;
【讨论】:
如果电子邮件已被验证,则重新验证更新的用户...
https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user
【讨论】:
与@yehyatt 的解决方案相同,但更简单。使用 firebase 登录用户,刷新用户,然后检查用户是否已通过验证。
让用户登录
Auth.auth().signIn(withEmail: YourEMail, password: YourPassword) { result, error in
if error != nil {
logInErrorReason = "\(error!.localizedDescription)"
// An error ocurred
}else {
// Handle successful login.
}
}
刷新当前用户:
Auth.auth().currentUser?.reload(completion: ((Error?) -> Void)?)
检查他是否登录:
if Auth.auth().currentUser?.isEmailVerified == true { // 处理成功验证}
【讨论】:
我认为您需要先使用signInWithEmailAndPassword 使用用户的电子邮件和密码登录,然后尝试拨打isEmailVerified()
返回用户的方法。
【讨论】:
isEmailVerified 应该提供正确的响应,但是您可能使用不正确。
因此,此问题的解决方案是更新您的注册流程。
当您创建新用户时,您还应该发出一个命令来启动电子邮件验证过程await user.sendEmailVerification();
一旦您的用户将收到一封电子邮件并将对其进行验证。你的方法:user.isEmailVerified 将返回 true
您的注册过程应如下所示:
AuthResult result = await _auth.createUserWithEmailAndPassword(
email: email,password: password);
FirebaseUser user = result.user;
await user.sendEmailVerification();
【讨论】:
您将看到您自己的帐户已经过验证,可以继续下一个设置
【讨论】: