Android版Firebase:如何查看Firebase身份验证失败的原因?

时间:2016-06-26 11:26:43

标签: android firebase firebase-authentication

我在Android和Firebase函数上使用Firebase Auth

我尝试FirebaseAuth.signInWithEmailAndPassword,如果失败,我想知道“为什么signIn进程失败?”

signInWithEmailAndPassword方法有addOnFailureListener API。 我可以在Exception回调方法中捕获FirebaseAuthException(可能onFailure)。

auth.signInWithEmailAndPassword(loginRequest.id, loginRequest.password)
  .addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
      if (e instanceof FirebaseAuthException) {
        ((FirebaseAuthException) e).getErrorCode());
      }
    }
  });

我想知道SignIn进程失败的原因。在onFailure

我认为可以按照以下方式完成:

  1. e实例类型检查(e instanceOf FirebaseAuthInvalidUserExceptionFirebaseAuthInvalidCredentialsException或,,,)
  2. e.getErrorCode()
  3. 我不想打字(它很脏) 我更喜欢上面选择的方式。但我找不到e.getErrorCode()返回值集合的定义。 例如ERROR_INVALID_EMAILERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL等 (他们在哪里定义?)

    请告诉我检查Firebase auth failed的原因的最佳方式。

    感谢。

4 个答案:

答案 0 :(得分:9)

我在Firebase库中找到了一些类似于目前为止失败消息的代码。但尚未尝试过。你可以尝试一下。

    ("ERROR_INVALID_CUSTOM_TOKEN", "The custom token format is incorrect. Please check the documentation."));
    ("ERROR_CUSTOM_TOKEN_MISMATCH", "The custom token corresponds to a different audience."));
    ("ERROR_INVALID_CREDENTIAL", "The supplied auth credential is malformed or has expired."));
    ("ERROR_INVALID_EMAIL", "The email address is badly formatted."));
    ("ERROR_WRONG_PASSWORD", "The password is invalid or the user does not have a password."));
    ("ERROR_USER_MISMATCH", "The supplied credentials do not correspond to the previously signed in user."));
    ("ERROR_REQUIRES_RECENT_LOGIN", "This operation is sensitive and requires recent authentication. Log in again before retrying this request."));
    ("ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL", "An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address."));
    ("ERROR_EMAIL_ALREADY_IN_USE", "The email address is already in use by another account."));
    ("ERROR_CREDENTIAL_ALREADY_IN_USE", "This credential is already associated with a different user account."));
    ("ERROR_USER_DISABLED", "The user account has been disabled by an administrator."));
    ("ERROR_USER_TOKEN_EXPIRED", "The user\'s credential is no longer valid. The user must sign in again."));
    ("ERROR_USER_NOT_FOUND", "There is no user record corresponding to this identifier. The user may have been deleted."));
    ("ERROR_INVALID_USER_TOKEN", "The user\'s credential is no longer valid. The user must sign in again."));
    ("ERROR_OPERATION_NOT_ALLOWED", "This operation is not allowed. You must enable this service in the console."));
    ("ERROR_WEAK_PASSWORD", "The given password is invalid."));

答案 1 :(得分:8)

我有同样的疑虑,我发现了更多关于他们文档的信息。

例如,在使用此方法 createUserWithEmailAndPassword 时,您可以在documentation page上看到以下例外情况:

例外:

如果密码不够强,则会引发FirebaseAuthWeakPasswordException 如果电子邮件地址格式错误,则抛出FirebaseAuthInvalidCredentialsException 如果已存在具有给定电子邮件地址的帐户

,则抛出FirebaseAuthUserCollisionException

对于每个例外,还有一个文档页面,例如FirebaseAuthUserCollisionException

的文档页面

在这里你可以看到不同的错误类型:

  

ERROR_EMAIL_ALREADY_IN_USE尝试使用createUserWithEmailAndPassword(字符串,字符串)创建新帐户或更改用户的电子邮件地址时,如果该电子邮件已被其他帐户使用

     

ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL在调用signInWithCredential(AuthCredential)时使用凭证断言其他帐户正在使用的电子邮件地址。如果每个电子邮件地址使用一个帐户,则只会抛出此错误"在Firebase控制台中启用了设置(推荐)。

     

ERROR_CREDENTIAL_ALREADY_IN_USE尝试将用户与已使用的其他帐户对应的AuthCredential链接时

因此,如果您执行getErrorCode()并将字符串与这些常量中的任何一个进行比较,您将确切知道异常的原因。

希望它有所帮助。

答案 2 :(得分:0)

成功启用电子邮件+密码身份验证方法后,您需要为Firebase项目创建一个应用程序。

转到: 概述 - >添加另一个应用程序 - >根据您的需要,按照以下步骤进行操作。

希望它对每个人都有帮助。干杯!

答案 3 :(得分:0)

过去需要将字符串转换为正确的错误消息,但从 firebase-admin 7.3.0 开始,这是由 AuthErrorHandler 完成的,您应该能够调用 FirebaseAuthException.getMessage()

如果您仍然想构建它,FirebaseAuthException.getAuthErrorCode() 将返回一个 AuthErrorCode 的实例,它现在是一个枚举。