Firebase电子邮件验证无法正常运行

Ari*_*Roy 13 android firebase firebase-authentication

是)我有的

我在我的应用中使用Firebase身份验证,用户可以使用电子邮件和密码进行注册.如果用户尚未验证其电子邮件,则会在验证其电子邮件之前禁用某些功能.

我还有一个按钮来显式触发验证邮件,它只是调用,sendEmailVerification().它工作正常,始终发送验证邮件.

问题

用户获取验证邮件,但当他/她验证并返回应用程序时,isEmailVerified()始终为假.所以我的应用程序仍然不允许用户使用所有功能,尽管他/她已经验证了他们的电子邮件.

但如果他们注销并再次登录,则isEmailVerified()立即返回true.但是注销用户并再次登录是不好的.

它是Firebase中的错误吗?或者我做错了什么?

Woo*_*uis 6

嘿,我知道这是一个很老的话题,但是什么解决了我的问题 FIRAuth.auth()?.currentUser.reload(completion: { (error) in ... })

对于任何面临此问题的人。我正在使用最新的Firebase版本10.0.1

更新

自从我发布解决方案以来,Firebase更改了其功能的名称。

请注意,通过添加stateDidChangeListener可以观察到当前用户状态的所有更改。Auth.auth()?. currentUser不会立即更新,所以我所做的就是将当前用户保存到我创建和维护的全局变量中。

Auth.auth().addStateDidChangeListener { (auth, user) in
 // ...
}
Run Code Online (Sandbox Code Playgroud)

每当您调用Auth.auth()?.currentUser.reload()刷新并准备使用的用户对象时,都会通过stateDidChangeListener传递该对象。

然后,您可以检查任何更新的数据(即emailVerified)


小智 5

这是我使用react-native解决这个问题的方法:

const user = firebase.auth().currentUser;
user.reload().then(() => {
  console.log({emailVerified: user.emailVerified})
})
Run Code Online (Sandbox Code Playgroud)

如果用户将应用程序从后台带到前台,我将其与 AppState 结合起来运行重新加载。