Когда пользователь хочет изменить свой пароль, я запрашиваю у него диалог для повторной аутентификации.В этом диалоговом окне он может повторно авторизоваться с помощью пароля или через Google / Facebook.Но когда я обновляю электронную почту Firebase, пользователь выходит из системы, и я хочу этого избежать.Рассмотрим этот код:
private fun btnGoogle(){
val acct = GoogleSignIn.getLastSignedInAccount(context)
Timber.d(acct?.email)
if (acct != null) {
val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
auth(credential)
}
}
private fun btnFacebook(){
val token = AccessToken.getCurrentAccessToken()
if(token!=null){
val credential = FacebookAuthProvider.getCredential(token.token)
auth(credential)
}else{
activity?.showBackgroundToast(getString(R.string.no_facebook_auth), Toast.LENGTH_LONG)
}
}
private fun auth(credential: AuthCredential) {
FirebaseAuth.getInstance().currentUser!!.reauthenticate(credential)
.addOnFailureListener{e -> activity?.showBackgroundToast(e.localizedMessage, Toast.LENGTH_LONG)}
.addOnCompleteListener { task ->
if (task.isSuccessful) {
mListener.onReAuthentication(true)
dialog.dismiss()
} else {
activity?.showBackgroundToast(task.exception?.localizedMessage, Toast.LENGTH_LONG)
}
}
}
Затем я вызываю эту функцию для фактического обновления электронного письма:
fun updateEmail(newEmail: String): Completable {
return Completable.create { emitter ->
val currentUser = FirebaseAuth.getInstance().currentUser
currentUser!!.updateEmail(newEmail).addOnCompleteListener {
if (it.isSuccessful) {
Timber.d("updated email to %s", newEmail)
emitter.onComplete()
} else {
emitter.onError(Throwable(it.exception?.localizedMessage))
}
}
}
}
Все работает нормально, пока я, наконец, не обновлю электронное письмо.Когда я это делаю, Firebase каждый раз выписывает пользователя!(ниже из Android Studio logcat)
D/FirebaseAuth: Notifying id token listeners about a sign-out event.
D/FirebaseAuth: Notifying auth state listeners about a sign-out event.
Это происходит только при смене электронной почты.Поскольку у меня есть auth state listener
, пользователь перенаправляется на экран входа в систему после успешного обновления электронной почты, что для меня не имеет смысла. Почему?Как я могу избежать этого?