Android Firebase, почему я получаю выход после смены электронной почты? - PullRequest
0 голосов
/ 13 июня 2019

Когда пользователь хочет изменить свой пароль, я запрашиваю у него диалог для повторной аутентификации.В этом диалоговом окне он может повторно авторизоваться с помощью пароля или через 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, пользователь перенаправляется на экран входа в систему после успешного обновления электронной почты, что для меня не имеет смысла. Почему?Как я могу избежать этого?

...