如果身份验证不成功,Firebase 身份验证是否会返回错误代码?

时间:2021-01-31 21:39:32

标签: android firebase kotlin firebase-authentication

我正在使用 Firebase Auth 构建登录流程,以使用电子邮件和密码对用户进行身份验证。登录时,有些事情可能会出错:给定的电子邮件地址不存在帐户,密码错误 (...)。

Firebase 是否返回任何错误代码以便我可以添加错误处理?我只找到了可用于错误处理的异常消息,但有什么方法可以使错误代码更整洁?我在 Firebase 官方文档中找不到任何内容。

    auth.signInWithEmailAndPassword(email, password).addOnCompleteListener { task ->
        if (task.isSuccessful) {
            // Sign in success, update UI with the signed-in user's information
            Log.d(TAG, "signInWithEmail:success")
        } 
    }.addOnFailureListener { exception: Exception ->
        when (exception.message) {
            "There is no user record corresponding to this identifier. The user may have been deleted." -> // Handle error
            "The password is invalid or the user does not have a password." ->// Handle error
            else -> // Handle error
        }
    }

1 个答案:

答案 0 :(得分:1)

<块引用>

Firebase 是否返回任何错误代码以便我可以添加错误处理?

当然可以。 FirebaseAuthException 类包含一个名为 getErrorCode() 的方法:

<块引用>

返回一个错误代码,可以提供有关错误的更多信息。

除此之外,在上述文档中,您还会发现两个非常有用的部分:

<块引用>
  1. 已知的直接子类:

还有:

<块引用>
  1. 已知的间接子类:

因此您始终可以根据抛出的特定异常获取特定消息。

编辑:

<块引用>

我想知道在哪里可以获得所有错误代码的列表。

Firebase 身份验证未提供完整的错误列表。链接的 answer 可能被认为有点旧,因为它是在 2016 年 7 月 7 日添加的。从那时起,Firebase Authentication SDK 发生了一些变化。如果您对错误代码感兴趣,您应该检查每种类型的异常。例如,FirebaseAuthException 的一个已知直接子类称为 FirebaseAuthInvalidUserException。在这个类中,你可能会看到一些错误代码:

  • ERROR_USER_DISABLED
  • ERROR_USER_NOT_FOUND
  • ERROR_USER_TOKEN_EXPIRED
  • ERROR_INVALID_USER_TOKEN。

因此,您拥有的最佳选择是查看每个特定类的内部。

这不仅在身份验证的情况下可用,它在所有其他 Exception 类的情况下都可用。例如,如果我们谈论 Cloud Firestore,相应的异常称为 FirebaseFirestoreException 并包含在带有错误代码的 enum 中。以下是值:

  • 中止
  • ALREADY_EXISTS
  • 已取消
  • 数据丢失
  • DEADLINE_EXCEEDED
  • FAILED_PRECONDITION
  • 内部
  • INVALID_ARGUMENT
  • 未找到
  • 好的
  • OUT_OF_RANGE
  • PERMISSION_DENIED
  • RESOURCE_EXHAUSTED
  • 未经身份验证
  • 不可用
  • 未实现
  • 未知