У меня сейчас проблема с некоторыми из моих пользователей, которые входят в систему с помощью электронной почты и пароля. Дело в том, что после отправки подтверждающего электронного письма я звоню reload
в моем текущем FirebaseUser, чтобы обновить currentUser и узнать, было ли подтверждено письмо или нет.
На данный момент все работает нормально. Дело в том, что иногда после вызова reload
над экземпляром FirebaseAuth.currentUser.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 является оберткой Reactive поверх Firebase, но я пробовал этот код также с использованием обычной Promise
библиотеки, и эта ошибка также происходит.
Мой NPE приходит на verified= authInstance.currentUser!!.isEmailVerified
, что не должно быть возможно, потому что я уже проверил проверку перед началом этого вызова, и вызов reload
был успешным.
Кто-то страдал от этой проблемы и знает, почему это может происходить? Как можно обойти это? Я мог бы управлять NPE там, но если перезагрузка прошла успешно, я хочу обновить моего пользователя в данных моего приложения, а не отправлять нулевой экземпляр.