Firebase AuthInstance.currentUser 成功重新加载后为空
Posted
技术标签:
【中文标题】Firebase AuthInstance.currentUser 成功重新加载后为空【英文标题】:Firebase AuthInstance.currentUser is null after successfully reload 【发布时间】:2018-10-20 10:37:41 【问题描述】:目前,我的一些用户使用电子邮件和密码登录时遇到了问题。情况是,在发送验证电子邮件后,我在当前的 FirebaseUser 中调用 reload
以更新 currentUser 以了解电子邮件是否已通过验证。
此时一切正常。问题是,有时在FirebaseAuth.currentUser.reload()
的实例上调用reload
后,在reload
的成功回调上,我试图再次访问已经更新的FirebaseAuth.currentUser
实例,有趣的是它来了为空,我得到一个 NPE,当用户成功重新加载并且实例应该被更新,而不是被删除时。
这是我现在的代码:
override fun verifyUser()
if (authInstance.currentUser == null)
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestFailure(FirebaseUserNotFound()),
verified = false))
return
RxFirebaseUser.reload(authInstance.currentUser!!)
.subscribeOn(Schedulers.io())
.subscribe(
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestSuccess(),
verified = authInstance.currentUser!!.isEmailVerified))
, error ->
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestFailure(error),
verified = false))
)
RxFirebase 调用是 Firebase 上的反应式包装器,但我也使用库的正常 Promise
尝试了此代码,并且此错误也发生了。
我的 NPE 即将启动 verified= authInstance.currentUser!!.isEmailVerified
,这应该是不可能的,因为我在开始此呼叫之前已经进行了检查,并且 reload
呼叫已成功。
有人遇到过这个问题,知道为什么会这样吗?如何解决它?我可以在那里控制 NPE,但如果重新加载成功,我想在我的应用数据中更新我的用户,而不是发送空实例。
【问题讨论】:
【参考方案1】:authInstance.currentUser
有时需要一些时间才能更新。您可以将您的reload
调用移动到observeOn
上的主线程,以便为authInstance
提供更多更新时间,并且以防万一在您的代码中添加retry
子句。应该是这样的:
RxFirebaseUser.reload(authInstance.currentUser!!)
.subscribeOn(Schedulers.io())
.repeatUntil authInstance.currentUser != null
.defaultTimeout()
.subscribe(
val user = authInstance.currentUser
val emailVerified = user?.isEmailVerified ?: false
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = if (user == null) requestRunning() else requestSuccess(),
verified = emailVerified))
, error ->
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestFailure(error),
verified = false))
)
【讨论】:
以上是关于Firebase AuthInstance.currentUser 成功重新加载后为空的主要内容,如果未能解决你的问题,请参考以下文章
无法解决:com.google.firebase:firebase-ml-vision:24.1.3;无法解决:com.google.firebase:firebase-core:20.0.2
没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()
如何修复 Firebase 9.0 导入错误? “尝试导入错误:‘firebase/app’不包含默认导出(导入为‘firebase’)。”