获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

处理 Firebase Apple 平台身份验证错误

如果 Authentication 方法的完成回调接收到一个非 nil 的NSError参数,则发生错误。要在生产代码中分派到适当的错误处理逻辑,请检查错误代码与下面列出的常见错误和特定于方法的错误。

某些错误可以通过特定的用户操作来解决,例如, FIRAuthErrorCodeUserTokenExpired可以通过重新登录用户来解决,而FIRAuthErrorCodeWrongPassword可以通过要求用户提供正确的密码来解决。

除了FIRAuthErrorCodeNetworkErrorFIRAuthErrorCodeTooManyRequests的情况外,使用相同参数重试失败的操作永远不会成功。不假设操作是否在服务器端生效。

调查或记录错误时,请查看userInfo字典。 FIRAuthErrorNameKey包含可用于识别错误的跨平台错误名称字符串。 NSLocalizedDescriptionKey包含错误的描述。此描述是针对开发人员的,而不是针对用户的。如果存在潜在错误,则NSUnderlyingErrorKey包含导致相关错误的潜在错误。

除了上面列出的主要字段之外, userInfo字典中可能还有其他字段,您可能会发现它们在诊断错误时很有用。

所有 API 方法共有的错误代码

代码意义
FIRAuthErrorCodeNetworkError表示操作过程中发生网络错误。
FIRAuthErrorCodeUserNotFound表示未找到用户帐户。如果用户帐户已被删除,则可能会发生这种情况。
FIRAuthErrorCodeUserTokenExpired表示当前用户的令牌已过期,例如,用户可能在另一台设备上更改了帐户密码。您必须提示用户在此设备上重新登录。
FIRAuthErrorCodeTooManyRequests表示在从调用方设备向 Firebase 身份验证服务器发出异常数量的请求后,该请求已被阻止。一段时间后重试。
FIRAuthErrorCodeInvalidAPIKey表示应用程序配置了无效的 API 密钥。
FIRAuthErrorCodeAppNotAuthorized表示应用无权通过提供的 API 密钥使用 Firebase 身份验证。转到 Google API 控制台并在凭据选项卡下检查您使用的 API 密钥是否已将您的应用程序的捆绑 ID 列入白名单。
FIRAuthErrorCodeKeychainError表示访问钥匙串时发生错误。 NSError.userInfo字典中的NSLocalizedFailureReasonErrorKeyNSUnderlyingErrorKey字段将包含有关遇到的错误的更多信息。
FIRAuthErrorCodeInternalError表示发生内部错误。请用整个NSError对象报告错误

方法特定的错误代码

FIRAuth

fetchProvidersForEmail:完成:

代码意义
FIRAuthErrorCodeInvalidEmail表示电子邮件地址格式错误。

signInWithEmail:密码:完成:

代码意义
FIRAuthErrorCodeOperationNotAllowed表示未启用电子邮件和密码帐户。在Firebase 控制台的 Auth 部分启用它们。
FIRAuthErrorCodeInvalidEmail表示电子邮件地址格式错误。
FIRAuthErrorCodeUserDisabled表示用户的帐户已禁用。
FIRAuthErrorCodeWrongPassword表示用户尝试使用错误密码登录。

登录WithCredential:完成:

代码意义
FIRAuthErrorCodeInvalidCredential表示提供的凭据无效。如果它已过期或格式不正确,则可能会发生这种情况。
FIRAuthErrorCodeInvalidEmail如果凭证的类型为EmailPasswordAuthCredential ,则表示电子邮件地址格式错误。
FIRAuthErrorCodeOperationNotAllowed表示未启用具有由凭据表示的身份提供者的帐户。在Firebase 控制台的 Auth 部分启用它们。
FIRAuthErrorCodeEmailAlreadyInUse表示凭据声明的电子邮件(例如 Facebook 访问令牌中的电子邮件)已被现有帐户使用,无法使用此登录方法对其进行身份验证。为此用户的电子邮件调用fetchProvidersForEmail ,然后提示他们使用返回的任何登录提供程序登录。只有在Firebase 控制台的身份验证设置下启用了“每个电子邮件地址一个帐户”设置时,才会引发此错误。
FIRAuthErrorCodeUserDisabled表示用户的帐户已禁用。
FIRAuthErrorCodeWrongPassword如果凭据的类型为EmailPasswordAuthCredential ,则表示用户尝试使用错误的密码登录。

signInAnonymouslyWithCompletion:

代码意义
FIRAuthErrorCodeOperationNotAllowed表示未启用匿名帐户。在Firebase 控制台的 Auth 部分启用它们。

登录WithCustomToken:完成:

代码意义
FIRAuthErrorCodeInvalidCustomToken指示自定义令牌的验证错误。
FIRAuthErrorCodeCustomTokenMismatch表示服务帐号和 API 密钥属于不同的项目。

createUserWithEmail:密码:完成:

代码意义
FIRAuthErrorCodeInvalidEmail表示电子邮件地址格式错误。
FIRAuthErrorCodeEmailAlreadyInUse表示用于尝试注册的电子邮件已存在。调用fetchProvidersForEmail以检查该用户使用了哪些登录机制,并提示用户使用其中一种登录。
FIRAuthErrorCodeOperationNotAllowed表示未启用电子邮件和密码帐户。在Firebase 控制台的 Authentication 部分启用它们。
FIRAuthErrorCodeWeakPassword表示尝试设置被认为太弱的密码。 NSError.userInfo字典对象中的NSLocalizedFailureReasonErrorKey字段将包含可以显示给用户的更详细的解释。

登出:

代码意义
FIRAuthErrorCodeKeychainError表示访问钥匙串时发生错误。 NSError.userInfo字典中的NSLocalizedFailureReasonErrorKeyNSUnderlyingErrorKey字段将包含有关遇到的错误的更多信息。

FIRUser

FIRUser 操作的常见错误

代码意义
FIRAuthErrorCodeInvalidUserToken表示登录用户的保存会话信息的刷新令牌无效。您必须提示用户在此设备上重新登录。
FIRAuthErrorCodeUserDisabled表示用户的帐户已被禁用,并且在从 Firebase 控制台的“用户”面板中再次启用之前无法再使用。

reauthenticateWithCredential:完成:

代码意义
FIRAuthErrorCodeInvalidCredential表示提供的凭据无效。如果它已过期或格式不正确,则可能会发生这种情况。
FIRAuthErrorCodeInvalidEmail如果凭证的类型为EmailPasswordAuthCredential ,则表示电子邮件地址格式错误。
FIRAuthErrorCodeWrongPassword如果凭据的类型为EmailPasswordAuthCredential ,则表示用户尝试使用不正确的密码重新进行身份验证。
FIRAuthErrorCodeUserMismatch表示尝试使用不是当前用户的用户重新进行身份验证。
FIRAuthErrorCodeOperationNotAllowed表示未启用具有由凭据表示的身份提供者的帐户。在Firebase 控制台的 Auth 部分启用它们。
FIRAuthErrorCodeEmailAlreadyInUse表示凭据声明的电子邮件(例如 Facebook 访问令牌中的电子邮件)已被现有帐户使用,无法使用此登录方法重新验证。为此用户的电子邮件调用fetchProvidersForEmail ,然后提示他们使用返回的任何登录提供程序登录。只有在Firebase 控制台的身份验证设置下启用了“每个电子邮件地址一个帐户”设置时,才会引发此错误。
FIRAuthErrorCodeUserDisabled表示用户的帐户已禁用。

更新电子邮件:完成:

代码意义
FIRAuthErrorCodeEmailAlreadyInUse表示电子邮件已被另一个帐户使用。
FIRAuthErrorCodeInvalidEmail表示电子邮件地址格式错误。
FIRAuthErrorCodeRequiresRecentLogin更新用户的电子邮件是一项安全敏感操作,需要用户最近登录。此错误表明用户最近登录的时间不够长。要解决此问题,请通过在FIRUser上调用reauthenticateWithCredential:completion:来重新验证用户。

更新密码:完成:

代码意义
FIRAuthErrorCodeOperationNotAllowed表示管理员禁用了使用指定身份提供者的登录。
FIRAuthErrorCodeRequiresRecentLogin更新用户密码是一项安全敏感操作,需要用户最近登录。此错误表明用户最近登录的时间不够长。要解决此问题,请通过在FIRUser上调用reauthenticateWithCredential:completion:来重新验证用户。
FIRAuthErrorCodeWeakPassword表示尝试设置被认为太弱的密码。 NSError.userInfo字典对象中的NSLocalizedFailureReasonErrorKey字段将包含可以显示给用户的更详细的解释。

链接WithCredential:完成:

代码意义
FIRAuthErrorCodeProviderAlreadyLinked表示尝试链接已链接到此帐户的类型的提供者。
FIRAuthErrorCodeCredentialAlreadyInUse表示尝试与已与其他 Firebase 帐户关联的凭据关联。
FIRAuthErrorCodeOperationNotAllowed表示未启用具有由凭据表示的身份提供者的帐户。在Firebase 控制台的 Auth 部分启用它们。

此方法还可能返回与 FIRUser 上的FIRUser updateEmail:completion:updatePassword:completion:相关的错误代码。

unlinkFromProvider:完成:

代码意义
FIRAuthErrorCodeNoSuchProvider表示尝试取消链接未链接到帐户的提供程序。
FIRAuthErrorCodeRequiresRecentLogin更新电子邮件是一项安全敏感操作,需要用户最近登录。此错误表明用户最近登录的时间不够长。要解决此问题,请通过在FIRUser上调用reauthenticateWithCredential:completion:来重新验证用户。

sendEmailVerificationWithCompletion:

代码意义
FIRAuthErrorCodeUserNotFound表示未找到用户帐户。

删除完成:

代码意义
FIRAuthErrorCodeRequiresRecentLogin删除用户帐户是一项安全敏感操作,需要用户最近登录。此错误表明用户最近登录的时间不够长。要解决此问题,请通过在FIRUser上调用reauthenticateWithCredential:completion:来重新验证用户。