處理 Firebase Apple 平台驗證錯誤

如果驗證方法上的完成回呼收到非 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

feedProvidersForEmail:complete:

程式碼 意義
FIRAuthErrorCodeInvalidEmail 表示電子郵件地址格式錯誤。

signInWithEmail:password:自動完成:

程式碼 意義
FIRAuthErrorCodeOperationNotAllowed 表示電子郵件和密碼帳戶尚未啟用。請前往 Firebase 控制台的「驗證」專區啟用這些設定。
FIRAuthErrorCodeInvalidEmail 表示電子郵件地址格式錯誤。
FIRAuthErrorCodeUserDisabled 表示使用者帳戶已停用。
FIRAuthErrorCodeWrongPassword 表示使用者嘗試以錯誤的密碼登入。

signInWithCredential:自動完成:

程式碼 意義
FIRAuthErrorCodeInvalidCredential 表示提供的憑證無效。如果訂單已過期或格式錯誤,就有可能會發生這種情況。
FIRAuthErrorCodeInvalidEmail 如果憑證是 EmailPasswordAuthCredential 類型,表示電子郵件地址格式錯誤。
FIRAuthErrorCodeOperationNotAllowed 表示帳戶並未啟用由憑證所代表的識別資訊提供者。請前往 Firebase 控制台的「驗證」專區啟用這些設定。
FIRAuthErrorCodeEmailAlreadyInUse 指出由憑證所聲明的電子郵件 (例如 Facebook 存取權杖中的電子郵件) 目前已有人使用,因此無法以這個登入方式進行驗證。針對這位使用者的電子郵件呼叫 fetchProvidersForEmail,然後提示使用者使用系統傳回的任一登入服務供應商登入。只有在 Firebase 控制台的「驗證設定」下方啟用「每個電子郵件地址一個帳戶」設定時,系統才會擲回這個錯誤。
FIRAuthErrorCodeUserDisabled 表示使用者帳戶已停用。
FIRAuthErrorCodeWrongPassword 表示使用者嘗試以錯誤的密碼登入 (如果憑證類型為 EmailPasswordAuthCredential)。

SignInAnonymouslyWithComplete:

程式碼 意義
FIRAuthErrorCodeOperationNotAllowed 表示匿名帳戶尚未啟用。請前往 Firebase 控制台的「驗證」專區啟用這些設定。

signInWithCustomToken:自動完成:

程式碼 意義
FIRAuthErrorCodeInvalidCustomToken 表示自訂權杖的驗證錯誤。
FIRAuthErrorCodeCustomTokenMismatch 表示服務帳戶和 API 金鑰分屬不同的專案。

createUserWithEmail:password:自動完成:

程式碼 意義
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 控制台的「驗證」專區啟用這些設定。
FIRAuthErrorCodeEmailAlreadyInUse 指出由憑證所聲明的電子郵件 (例如 Facebook 存取權杖中的電子郵件) 目前已有人使用,因此無法以這個登入方式重新驗證。針對這位使用者的電子郵件呼叫 fetchProvidersForEmail,然後提示使用者使用系統傳回的任一登入服務供應商登入。只有在 Firebase 控制台的「驗證設定」下方啟用「每個電子郵件地址一個帳戶」設定時,系統才會擲回這個錯誤。
FIRAuthErrorCodeUserDisabled 表示使用者帳戶已停用。

updateEmail:complete:

程式碼 意義
FIRAuthErrorCodeEmailAlreadyInUse 表示另一個帳戶已使用這個電子郵件地址。
FIRAuthErrorCodeInvalidEmail 表示電子郵件地址格式錯誤。
FIRAuthErrorCodeRequiresRecentLogin 更新使用者的電子郵件屬於安全性敏感作業,使用者必須近期登入才能進行。此錯誤表示使用者最近沒有登入一段時間。如要解決這個問題,請在 FIRUser 上叫用 reauthenticateWithCredential:completion:,重新驗證使用者。

updatePassword:complete:

程式碼 意義
FIRAuthErrorCodeOperationNotAllowed 表示管理員已停用使用指定識別資訊提供者的登入功能。
FIRAuthErrorCodeRequiresRecentLogin 更新使用者密碼屬於安全性敏感作業,使用者必須近期登入才能進行。此錯誤表示使用者最近沒有登入一段時間。如要解決這個問題,請在 FIRUser 上叫用 reauthenticateWithCredential:completion:,重新驗證使用者。
FIRAuthErrorCodeWeakPassword 表示嘗試設定的密碼強度太弱。NSError.userInfo 字典物件中的 NSLocalizedFailureReasonErrorKey 欄位會包含更多向使用者顯示的詳細說明。

linkWithCredential:自動完成:

程式碼 意義
FIRAuthErrorCodeProviderAlreadyLinked 表示嘗試連結已連結至此帳戶類型的提供者。
FIRAuthErrorCodeCredentialAlreadyInUse 表示嘗試連結的憑證已連結至其他 Firebase 帳戶。
FIRAuthErrorCodeOperationNotAllowed 表示帳戶並未啟用由憑證所代表的識別資訊提供者。請前往 Firebase 控制台的「驗證」專區啟用這些設定。

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

LinkFromProvider:complete:

程式碼 意義
FIRAuthErrorCodeNoSuchProvider 表示嘗試取消連結未連結到帳戶的供應商。
FIRAuthErrorCodeRequiresRecentLogin 更新電子郵件屬於安全性敏感作業,使用者必須近期登入才能更新。此錯誤表示使用者最近沒有登入一段時間。如要解決這個問題,請在 FIRUser 上叫用 reauthenticateWithCredential:completion:,重新驗證使用者。

sendEmailVerificationWithComplete:

程式碼 意義
FIRAuthErrorCodeUserNotFound 表示找不到使用者帳戶。

deleteWithCompleted:

程式碼 意義
FIRAuthErrorCodeRequiresRecentLogin 刪除使用者帳戶屬於安全性敏感作業,使用者必須近期登入才能進行。此錯誤表示使用者最近沒有登入一段時間。如要解決這個問題,請在 FIRUser 上叫用 reauthenticateWithCredential:completion:,重新驗證使用者。