【发布时间】: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,但如果重新加载成功,我想在我的应用数据中更新我的用户,而不是发送空实例。
【问题讨论】:
标签: android firebase kotlin firebase-authentication