Обработка ошибок аутентификации на платформах Apple Firebase

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

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

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

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

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

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

Код Значение
FIRAuthErrorCodeNetworkError Указывает на сетевую ошибку, произошедшую во время операции.
FIRAuthErrorCodeUserNotFound Указывает на то, что учетная запись пользователя не найдена. Это может произойти, если учетная запись пользователя удалена.
FIRAuthErrorCodeUserTokenExpired Указывает на то, что срок действия токена текущего пользователя истек, например, пользователь мог изменить пароль учетной записи на другом устройстве. Необходимо предложить пользователю повторно войти в систему на этом устройстве.
FIRAuthErrorCodeTooManyRequests Указывает на то, что запрос был заблокирован после того, как с вызывающего устройства было отправлено аномально большое количество запросов к серверам Firebase Authentication . Повторите попытку через некоторое время.
FIRAuthErrorCodeInvalidAPIKey Указывает на то, что приложение было настроено с недействительным ключом API.
FIRAuthErrorCodeAppNotAuthorized Это означает, что приложение не авторизовано для использования аутентификации Firebase с предоставленным ключом API. Перейдите в консоль Google API и проверьте на вкладке «Учетные данные», что используемый вами ключ 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 , это означает, что пользователь попытался войти в систему с неверным паролем.

signInAnonymouslyWithComplete:

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

signInWithCustomToken:completion:

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

createUserWithEmail:password:completion:

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

выход:

Код Значение
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 .

sendEmailVerificationWithComplete:

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

deleteWithComplete:

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