處理 Firebase Apple 平台身份驗證錯誤

如果驗證方法上的完成回呼收到不為零的NSError參數,則發生錯誤。要分派到生產程式碼中適當的錯誤處理邏輯,請根據下面列出的常見錯誤和方法特定錯誤檢查錯誤代碼。

某些錯誤可以透過特定的使用者操作來解決,例如, FIRAuthErrorCodeUserTokenExpired可以透過使用者再次登入來解決, FIRAuthErrorCodeWrongPassword可以透過要求使用者提供正確的密碼來解決。

除了FIRAuthErrorCodeNetworkErrorFIRAuthErrorCodeTooManyRequests的情況外,使用相同參數重試失敗的操作永遠不會成功。不假設該操作在伺服器端是否生效。

調查或記錄錯誤時,請查看userInfo字典。 FIRAuthErrorNameKey包含可用於識別錯誤的跨平台錯誤名稱字串。 NSLocalizedDescriptionKey包含錯誤的描述。此描述適用於開發人員,而不是使用者。 NSUnderlyingErrorKey包含導致相關錯誤的底層錯誤(如果存在底層錯誤)。

除了上面列出的主要字段之外, userInfo字典中還可能存在其他字段,您在診斷錯誤時可能會發現這些字段很有用。

所有 API 方法共有的錯誤代碼

程式碼意義
FIRAuthErrorCodeNetworkError表示操作過程中出現網路錯誤。
FIRAuthErrorCodeUserNotFound表示未找到用戶帳戶。如果使用者帳戶已被刪除,則可能會發生這種情況。
FIRAuthErrorCodeUserTokenExpired表示目前使用者的token已過期,例如使用者可能在其他裝置上變更了帳戶密碼。您必須提示使用者在此裝置上再次登入。
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指示使用者嘗試使用錯誤密碼登入。

SignInWithCredential: 完成:

程式碼意義
FIRAuthErrorCodeInvalidCredential表示提供的憑證無效。如果它已過期或格式錯誤,則可能會發生這種情況。
FIRAuthErrorCodeInvalidEmail如果憑證的類型為EmailPasswordAuthCredential ,則表示電子郵件地址格式錯誤。
FIRAuthErrorCodeOperationNotAllowed表示未啟用具有由憑證表示的身分提供者的帳戶。在Firebase 控制台的 Auth 部分啟用它們。
FIRAuthErrorCodeEmailAlreadyInUse表示憑證所聲明的電子郵件(例如 Facebook 存取權杖中的電子郵件)已被現有帳號使用,無法使用此登入方法進行驗證。為該使用者的電子郵件呼叫fetchProvidersForEmail ,然後提示他們使用返回的任何登入提供者進行登入。只有在Firebase 控制台的驗證設定下啟用「每個電子郵件地址一個帳戶」設定時,才會引發此錯誤。
FIRAuthErrorCodeUserDisabled表示使用者的帳戶已停用。
FIRAuthErrorCodeWrongPassword如果憑證的類型為EmailPasswordAuthCredential ,則表示使用者嘗試使用錯誤密碼登入。

匿名登入完成:

程式碼意義
FIRAuthErrorCodeOperationNotAllowed表示未啟用匿名帳號。在Firebase 控制台的 Auth 部分啟用它們。

SignInWithCustomToken:完成:

程式碼意義
FIRAuthErrorCodeInvalidCustomToken指示自訂令牌的驗證錯誤。
FIRAuthErrorCodeCustomTokenMismatch表示服務帳號和API key屬於不同的項目。

createUserWithEmail:密碼:完成:

程式碼意義
FIRAuthErrorCodeInvalidEmail表示電子郵件地址格式錯誤。
FIRAuthErrorCodeEmailAlreadyInUse表示用於嘗試註冊的電子郵件已存在。呼叫fetchProvidersForEmail檢查該使用者使用的登入機制,並提示使用者使用其中一種登入機制。
FIRAuthErrorCodeOperationNotAllowed表示電子郵件和密碼帳戶未啟用。在Firebase 控制台的「身份驗證」部分啟用它們。
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欄位將包含可以向使用者顯示的更詳細的解釋。

linkWithCredential: 完成:

程式碼意義
FIRAuthErrorCodeProviderAlreadyLinked表示嘗試連結已連結到此帳戶的類型的提供者。
FIRAuthErrorCodeCredentialAlreadyInUse表示嘗試連結已與其他 Firebase 帳戶連結的憑證。
FIRAuthErrorCodeOperationNotAllowed表示未啟用具有由憑證表示的身分提供者的帳戶。在Firebase 控制台的 Auth 部分啟用它們。

此方法也可能傳回與FIRUser上的updateEmail:completion:updatePassword:completion:相關的錯誤代碼。

unlinkFromProvider:完成:

程式碼意義
FIRAuthErrorCodeNoSuchProvider表示嘗試取消連結未連結到該帳戶的提供者。
FIRAuthErrorCodeRequiresRecentLogin更新電子郵件是一項安全敏感操作,需要使用者最近登入。此錯誤表示使用者最近沒有登入。若要解決此問題,請透過在FIRUser上呼叫reauthenticateWithCredential:completion:重新驗證使用者。

發送電子郵件驗證完成:

程式碼意義
FIRAuthErrorCodeUserNotFound表示未找到用戶帳戶。

完成後刪除:

程式碼意義
FIRAuthErrorCodeRequiresRecentLogin刪除使用者帳號是一項安全敏感操作,需要使用者最近登入。此錯誤表示使用者最近沒有登入。若要解決此問題,請透過在FIRUser上呼叫reauthenticateWithCredential:completion:重新驗證使用者。