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

标签 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
        }
    }

最佳答案

Does Firebase return any error code so I can add error handling?

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

Returns an error code that may provide more information about the error.

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

  1. Known Direct Subclasses:

还有:

  1. Known Indirect Subclasses:

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

编辑:

I was wondering is where to get a list of all error codes.

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

  • ERROR_USER_DISABLED
  • ERROR_USER_NOT_FOUND
  • ERROR_USER_TOKEN_EXPIRED
  • ERROR_INVALID_USER_TOKEN。

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

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

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

关于android - 如果身份验证不成功,Firebase Auth 是否会返回错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65984549/

相关文章:

java - 有没有办法在二维数组中删除特定行?

ios - 当应用程序处于后台时,推送通知不起作用

Firebase 推送通知受众

null - 仅当不为空时才为变量赋值 - Kotlin

android - onOptionsItemSelected不能在 fragment 中工作

Kotlin:多个命名的伴生对象

android - 在单个查询中获取联系人的详细信息

java - Android 无法实例化一个或多个类

android - 更改 AppCompatSpinner 弹出窗口背景颜色

database - Cloud Firestore 中 Multi-Tenancy 的命名空间