Как обрабатывать ошибки аутентификации Firebase на платформах Apple

Если обратный вызов завершения для методов Authentication получает аргумент NSError, который не является нулевым, значит произошла ошибка. Чтобы в рабочем коде можно было использовать подходящую логику обработки ошибок, проверьте код ошибки на наличие распространенных ошибок и ошибок, связанных с определенным методом, которые перечислены ниже.

Некоторые ошибки можно устранить, выполнив определенные действия. Например, ошибку FIRAuthErrorCodeUserTokenExpired можно исправить, повторно выполнив вход в аккаунт, а ошибку FIRAuthErrorCodeWrongPassword – попросив пользователя ввести правильный пароль.

За исключением случаев FIRAuthErrorCodeNetworkError или FIRAuthErrorCodeTooManyRequests, повторная попытка выполнить операцию с теми же аргументами никогда не будет успешной. Не предполагайте, что операция выполнена на стороне сервера.

При исследовании или регистрации ошибок используйте словарь userInfo. FIRAuthErrorNameKey содержит строку с названием ошибки, которая может использоваться для ее идентификации на разных платформах. NSLocalizedDescriptionKey содержит описание ошибки. Это описание предназначено для разработчика, а не для пользователя. NSUnderlyingErrorKey содержит основную ошибку, которая вызвала ошибку в вопросе, если основная ошибка присутствует.

Помимо основных полей, перечисленных выше, в словаре userInfo могут быть и другие поля, которые могут быть полезны при диагностике ошибок.

Коды ошибок, общие для всех методов API

Код Значение
FIRAuthErrorCodeNetworkError Указывает на то, что во время операции произошла ошибка сети.
FIRAuthErrorCodeUserNotFound Указывает, что аккаунт пользователя не найден. Это может произойти, если аккаунт пользователя был удален.
FIRAuthErrorCodeUserTokenExpired Указывает, что срок действия токена текущего пользователя истек. Например, пользователь мог изменить пароль аккаунта на другом устройстве. Пользователю нужно будет снова войти в аккаунт на этом устройстве.
FIRAuthErrorCodeTooManyRequests Указывает, что запрос был заблокирован после того, как вызывающее устройство отправило на серверы Firebase Authentication аномально большое количество запросов. Повторите попытку позже.
FIRAuthErrorCodeInvalidAPIKey Указывает, что в приложении настроен недействительный ключ API.
FIRAuthErrorCodeAppNotAuthorized Указывает, что приложению не разрешено использовать аутентификацию Firebase с предоставленным ключом API. Откройте Google API Console и на вкладке "Учетные данные" убедитесь, что идентификатор пакета вашего приложения добавлен в белый список ключа API, который вы используете.
FIRAuthErrorCodeKeychainError Указывает на ошибку при доступе к цепочке ключей. В полях NSLocalizedFailureReasonErrorKey и NSUnderlyingErrorKey словаря NSError.userInfo будет указана дополнительная информация об ошибке.
FIRAuthErrorCodeInternalError Указывает на то, что произошла внутренняя ошибка. Сообщите об ошибке, приложив весь объект NSError.

Коды ошибок для определенных методов

FIRAuth

fetchProvidersForEmail:completion:

Код Значение
FIRAuthErrorCodeInvalidEmail Указывает на то, что адрес электронной почты имеет неверный формат.

signInWithEmail:password:completion:

Код Значение
FIRAuthErrorCodeOperationNotAllowed Указывает, что аккаунты с адресом электронной почты и паролем не включены. Включите их в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Способ входа).
FIRAuthErrorCodeInvalidEmail Указывает на то, что адрес электронной почты имеет неверный формат.
FIRAuthErrorCodeUserDisabled Указывает, что аккаунт пользователя отключен.
FIRAuthErrorCodeWrongPassword Показывает, что пользователь попытался войти в аккаунт с неверным паролем.

signInWithCredential:completion:

Код Значение
FIRAuthErrorCodeInvalidCredential Указывает, что предоставленные учетные данные недействительны. Это может произойти, если срок действия сертификата истек или он поврежден.
FIRAuthErrorCodeInvalidEmail Указывает, что адрес электронной почты имеет неверный формат, если учетные данные относятся к типу EmailPasswordAuthCredential.
FIRAuthErrorCodeOperationNotAllowed Указывает, что аккаунты с поставщиком идентификационной информации, представленным учетными данными, не включены. Включите их в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Способ входа).
FIRAuthErrorCodeEmailAlreadyInUse Указывает, что адрес электронной почты, заявленный учетными данными (например, адрес электронной почты в токене доступа Facebook), уже используется существующим аккаунтом, который нельзя аутентифицировать с помощью этого способа входа. Вызовите fetchProvidersForEmail для адреса электронной почты этого пользователя, а затем предложите ему войти в систему с помощью любого из возвращенных поставщиков услуг входа. Эта ошибка возникает только в том случае, если в консоли Firebase включена настройка "Один аккаунт на адрес электронной почты" (Безопасность > Аутентификация > вкладка Настройки).
FIRAuthErrorCodeUserDisabled Указывает, что аккаунт пользователя отключен.
FIRAuthErrorCodeWrongPassword Указывает, что пользователь попытался войти в аккаунт с неверным паролем, если учетные данные относятся к типу EmailPasswordAuthCredential.

signInAnonymouslyWithCompletion:

Код Значение
FIRAuthErrorCodeOperationNotAllowed Указывает, что анонимные аккаунты не включены. Включите их в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Способ входа).

signInWithCustomToken:completion:

Код Значение
FIRAuthErrorCodeInvalidCustomToken Указывает на ошибку проверки собственного токена.
FIRAuthErrorCodeCustomTokenMismatch Указывает, что сервисный аккаунт и ключ API относятся к разным проектам.

createUserWithEmail:password:completion:

Код Значение
FIRAuthErrorCodeInvalidEmail Указывает на то, что адрес электронной почты имеет неверный формат.
FIRAuthErrorCodeEmailAlreadyInUse Указанный адрес электронной почты уже используется. Вызовите метод fetchProvidersForEmail, чтобы проверить, какие способы входа использовал пользователь, и предложите ему войти одним из этих способов.
FIRAuthErrorCodeOperationNotAllowed Указывает, что аккаунты с адресом электронной почты и паролем не включены. Включите их в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Способ входа).
FIRAuthErrorCodeWeakPassword Попытка задать слишком простой пароль. В поле NSLocalizedFailureReasonErrorKey объекта словаря NSError.userInfo будет содержаться более подробное объяснение, которое можно показать пользователю.

signOut:

Код Значение
FIRAuthErrorCodeKeychainError Указывает на ошибку при доступе к цепочке ключей. В полях NSLocalizedFailureReasonErrorKey и NSUnderlyingErrorKey словаря NSError.userInfo будет указана дополнительная информация об ошибке.

FIRUser

Распространенные ошибки при работе с FIRUser

Код Значение
FIRAuthErrorCodeInvalidUserToken Указывает, что токен обновления вошедшего в аккаунт пользователя, в котором хранится информация о сеансе, недействителен. Пользователю нужно будет снова войти в аккаунт на этом устройстве.
FIRAuthErrorCodeUserDisabled Указывает, что аккаунт пользователя отключен и его нельзя использовать, пока он не будет снова включен в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Пользователи).

reauthenticateWithCredential:completion:

Код Значение
FIRAuthErrorCodeInvalidCredential Указывает, что предоставленные учетные данные недействительны. Это может произойти, если срок действия сертификата истек или он поврежден.
FIRAuthErrorCodeInvalidEmail Указывает, что адрес электронной почты имеет неверный формат, если учетные данные относятся к типу EmailPasswordAuthCredential.
FIRAuthErrorCodeWrongPassword Указывает, что пользователь попытался повторно пройти аутентификацию с неверным паролем, если учетные данные имеют тип EmailPasswordAuthCredential.
FIRAuthErrorCodeUserMismatch Указывает, что была предпринята попытка повторной аутентификации с пользователем, который не является текущим.
FIRAuthErrorCodeOperationNotAllowed Указывает, что аккаунты с поставщиком идентификационной информации, представленным учетными данными, не включены. Включите их в консоли Firebase (выберите Безопасность > Аутентификация).
FIRAuthErrorCodeEmailAlreadyInUse Указывает, что адрес электронной почты, заявленный учетными данными (например, адрес электронной почты в токене доступа Facebook), уже используется существующим аккаунтом, который нельзя повторно аутентифицировать с помощью этого способа входа. Вызовите fetchProvidersForEmail для адреса электронной почты этого пользователя, а затем предложите ему войти в систему с помощью любого из возвращенных поставщиков услуг входа. Эта ошибка возникает только в том случае, если в консоли Firebase включена настройка "Один аккаунт на адрес электронной почты" (Безопасность > Аутентификация > вкладка Настройки).
FIRAuthErrorCodeUserDisabled Указывает, что аккаунт пользователя отключен.

updateEmail:completion:

Код Значение
FIRAuthErrorCodeEmailAlreadyInUse Указанный адрес электронной почты уже используется в другом аккаунте.
FIRAuthErrorCodeInvalidEmail Указывает на то, что адрес электронной почты имеет неверный формат.
FIRAuthErrorCodeRequiresRecentLogin Изменение адреса электронной почты пользователя – это операция, связанная с безопасностью, для которой требуется недавний вход пользователя в систему. Эта ошибка означает, что пользователь давно не входил в аккаунт. Чтобы устранить проблему, повторно аутентифицируйте пользователя, вызвав reauthenticateWithCredential:completion: на FIRUser.

updatePassword:completion:

Код Значение
FIRAuthErrorCodeOperationNotAllowed Указывает, что администратор отключил вход с помощью указанного поставщика идентификационной информации.
FIRAuthErrorCodeRequiresRecentLogin Изменение пароля пользователя – это операция, связанная с безопасностью, для которой требуется недавний вход пользователя в систему. Эта ошибка означает, что пользователь давно не входил в аккаунт. Чтобы устранить проблему, повторно аутентифицируйте пользователя, вызвав reauthenticateWithCredential:completion: на FIRUser.
FIRAuthErrorCodeWeakPassword Попытка задать слишком простой пароль. В поле NSLocalizedFailureReasonErrorKey объекта словаря NSError.userInfo будет содержаться более подробное объяснение, которое можно показать пользователю.

linkWithCredential:completion:

Код Значение
FIRAuthErrorCodeProviderAlreadyLinked Показывает, что была попытка связать поставщика услуг, который уже связан с этим аккаунтом.
FIRAuthErrorCodeCredentialAlreadyInUse Попытка связать аккаунт с учетными данными, которые уже связаны с другим аккаунтом Firebase.
FIRAuthErrorCodeOperationNotAllowed Указывает, что аккаунты с поставщиком идентификационной информации, представленным учетными данными, не включены. Включите их в консоли Firebase (перейдите на вкладку Безопасность > Аутентификация > Способ входа).

Этот метод также может возвращать коды ошибок, связанные с updateEmail:completion: и updatePassword:completion: на FIRUser.

unlinkFromProvider:completion:

Код Значение
FIRAuthErrorCodeNoSuchProvider Показывает, что была попытка отменить связь с поставщиком, который не связан с аккаунтом.
FIRAuthErrorCodeRequiresRecentLogin Изменение адреса электронной почты – это операция, связанная с безопасностью, для которой требуется недавний вход пользователя в аккаунт. Эта ошибка означает, что пользователь давно не входил в аккаунт. Чтобы устранить проблему, повторно аутентифицируйте пользователя, вызвав reauthenticateWithCredential:completion: на FIRUser.

sendEmailVerificationWithCompletion:

Код Значение
FIRAuthErrorCodeUserNotFound Указывает, что аккаунт пользователя не найден.

deleteWithCompletion:

Код Значение
FIRAuthErrorCodeRequiresRecentLogin Удаление аккаунта пользователя – это операция, связанная с безопасностью, для которой требуется недавний вход пользователя в систему. Эта ошибка означает, что пользователь давно не входил в аккаунт. Чтобы устранить проблему, повторно аутентифицируйте пользователя, вызвав reauthenticateWithCredential:completion: на FIRUser.