Check out what’s new from Firebase at Google I/O 2022. Learn more

處理 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:來重新驗證用戶。