FirebaseAuthUserCollisionException против FirebaseAuthInvalidUserException, когда учетная запись пользователя отключена? - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я разрабатываю приложение android, которое использует FirebaseAuth для управления пользователями. Пользователи могут войти в систему либо по электронной почте, либо через Google.

Учитывая это, я улавливаю некоторые исключения для решения любых проблем с системой аутентификации.

Большинство из них работает нормально. Это мой код:

    when(task.exception!!){
        is FirebaseAuthEmailException -> {
            errorDialogBuilder.setTitle(R.string.exception_email_title)
            errorDialogBuilder.setMessage(getString(R.string.exception_email_msg, task.exception!!.localizedMessage))
        }
        is FirebaseAuthInvalidCredentialsException -> {
            errorDialogBuilder.setTitle(R.string.exception_invalid_credentials_title)
            errorDialogBuilder.setMessage(getString(R.string.exception_invalid_credentials_msg, task.exception!!.localizedMessage))
        }
        is FirebaseAuthInvalidUserException -> {
            val invalidUserException = task.exception!! as FirebaseAuthInvalidUserException
            when (invalidUserException.errorCode) {
                "ERROR_USER_DISABLED" -> {
                    errorDialogBuilder.setTitle(R.string.exception_user_disabled_title)
                    errorDialogBuilder.setMessage(R.string.exception_user_disabled_msg)
                    errorDialogBuilder.setNeutralButton(R.string.more, null)
                }
                "ERROR_USER_NOT_FOUND" -> {
                    errorDialogBuilder.setTitle(R.string.exception_user_not_found_title)
                    errorDialogBuilder.setMessage(getString(R.string.exception_user_not_found_msg, fragmentView.email_input_signin.text.toString()))
                    errorDialogBuilder.setNeutralButton(R.string.action_createnew_account) { _, _ ->
                        viewModel.createUser(fragmentView.email_input_signin.text.toString(), fragmentView.email_password.text.toString())
                    }
                }
                else -> {
                    errorDialogBuilder.setTitle(invalidUserException.errorCode)
                    errorDialogBuilder.setMessage(invalidUserException.localizedMessage)

                }
            }
        }
    }

У меня не было проблем при использовании этого кода в целях разработки. Но я обнаружил кое-что очень странное: я играю с отключенными пользователями; Эта проблема возникла: всякий раз, когда я отключаю учетную запись Google, not a FirebaseAuthInvalidUserException выбрасывается с кодом ERROR_USER_DISABLED, как при попытке войти с отключенной учетной записью на основе электронной почты, но FirebaseUserCollissionException, который имеет точно такое же сообщение, как у FirebaseAuthInvalidUserException с кодом ERROR_USER_DISABLED:

com.google.firebase.auth.FirebaseAuthUserCollisionException: The user account has been disabled by an administrator.
    at com.google.firebase.auth.api.internal.zzdx.zza(com.google.firebase:firebase-auth@@19.1.0:42)
    at com.google.firebase.auth.api.internal.zzfa.zza(com.google.firebase:firebase-auth@@19.1.0:19)
    at com.google.firebase.auth.api.internal.zzet.zza(com.google.firebase:firebase-auth@@19.1.0:34)
    at com.google.firebase.auth.api.internal.zzev.zza(com.google.firebase:firebase-auth@@19.1.0:98)
    at com.google.firebase.auth.api.internal.zzev.zza(com.google.firebase:firebase-auth@@19.1.0:85)
    at com.google.firebase.auth.api.internal.zzed.zza(com.google.firebase:firebase-auth@@19.1.0:43)
    at com.google.android.gms.internal.firebase_auth.zza.onTransact(com.google.firebase:firebase-auth@@19.1.0:13)
    at android.os.Binder.execTransactInternal(Binder.java:1021)
    at android.os.Binder.execTransact(Binder.java:994)

Вот как это выглядит нормально при попытке использовать отключенную учетную запись на основе электронной почты (это обрабатывается, и это работает):

com.google.firebase.auth.FirebaseAuthInvalidUserException: The user account has been disabled by an administrator.
    at com.google.firebase.auth.api.internal.zzdx.zza(com.google.firebase:firebase-auth@@19.1.0:6)
    at com.google.firebase.auth.api.internal.zzfa.zza(com.google.firebase:firebase-auth@@19.1.0:21)
    at com.google.firebase.auth.api.internal.zzet.zza(com.google.firebase:firebase-auth@@19.1.0:34)
    at com.google.firebase.auth.api.internal.zzev.zza(com.google.firebase:firebase-auth@@19.1.0:74)
    at com.google.firebase.auth.api.internal.zzed.zza(com.google.firebase:firebase-auth@@19.1.0:18)
    at com.google.android.gms.internal.firebase_auth.zza.onTransact(com.google.firebase:firebase-auth@@19.1.0:13)
    at android.os.Binder.execTransactInternal(Binder.java:1021)
    at android.os.Binder.execTransact(Binder.java:994)

Почему здесь используются два разных исключения? И почему firebase выбрасывает FirebaseAuthUserCollisionException, когда учетная запись пользователя отключена, поскольку, насколько я знаю из документов , FirebaseAuthUserCollisionException выбрасывается только тогда, когда конфликтуют учетные записи пользователей?

Кроме того: Краткая выдержка из документации Firebase:

FirebaseAuthUserCollisionException

publi c окончательный класс FirebaseAuthUserCollisionException extends FirebaseAuthException

Брошенный, когда операция над экземпляром FirebaseUser не может быть завершена из-за конфликта с другим существующим пользователем.

1 Ответ

0 голосов
/ 28 апреля 2020

Странно. Я прочитал Google API для Android документов - и то, что вы сказали правильно - FirebaseAuthUserCollisionException следует выдавать только в случае конфликта между пользователями Firebase, особенно если оба случайно используют одни и те же учетные данные, но я думаю, что Firebase Auth этого не делает разрешите это, и он может обнаружить, если учетные данные между двумя пользователями или более одинаковы с самого начала.

Я думаю, что Firebase Auth пытается перерегистрировать / повторно добавить отключенную учетную запись Google в систему, когда вы используйте его для входа. Так как учетная запись Google отключена, Firebase Auth может считать учетную запись недействительной - однако учетная запись все еще остается и записывается в системе аутентификации - следовательно, если вы пытаетесь войти с ранее отключенной учетной записью Google, Firebase Auth пытается добавить это и столкнуться с предыдущей записью отключенной учетной записи Google.

Существует также вероятность того, что это может быть ошибка / сбой / ошибка на стороне Firebase Auth.

Если вы спрашиваете о разнице, я думаю, что это связано с обстоятельствами ES / условия, которые вызвали возникновение любого из этих исключений; большинство исключений схожи, это различие имеет цель и причина ошибки.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...