Obsługa błędów uwierzytelniania w usłudze Firebase Apple Platform

Jeśli wywołanie zwrotne po zakończeniu działania metod Authentication otrzyma argument NSError o wartości, która nie jest nil, oznacza to, że wystąpił błąd. Aby przekierować do odpowiedniej logiki obsługi błędów w kodzie produkcyjnym, sprawdź kod błędu w porównaniu z typowymi błędami i błędami specyficznymi dla metody wymienionymi poniżej.

Niektóre błędy można rozwiązać, wykonując określone działania, np. FIRAuthErrorCodeUserTokenExpired można rozwiązać, ponownie logując użytkownika, a FIRAuthErrorCodeWrongPassword – prosząc użytkownika o podanie prawidłowego hasła.

Z wyjątkiem przypadków FIRAuthErrorCodeNetworkError lub FIRAuthErrorCodeTooManyRequests ponawianie nieudanej operacji z tymi samymi argumentami nigdy się nie powiedzie. Nie zakładaj, że operacja została wykonana po stronie serwera.

Podczas analizowania lub rejestrowania błędów sprawdź słownik userInfo. FIRAuthErrorNameKey zawiera ciąg tekstowy z nazwą błędu na wielu platformach, który można wykorzystać do identyfikacji błędu. NSLocalizedDescriptionKey zawiera opis błędu. Ten opis jest przeznaczony dla dewelopera, a nie dla użytkownika. NSUnderlyingErrorKey zawiera podstawowy błąd, który spowodował dany błąd, jeśli taki błąd występuje.

Oprócz głównych pól wymienionych powyżej w słowniku userInfo mogą znajdować się inne pola, które mogą być przydatne podczas diagnozowania błędów.

Kody błędów wspólne dla wszystkich metod API

Kod Znaczenie
FIRAuthErrorCodeNetworkError Wskazuje, że podczas operacji wystąpił błąd sieci.
FIRAuthErrorCodeUserNotFound Wskazuje, że nie znaleziono konta użytkownika. Może się tak zdarzyć, jeśli konto użytkownika zostało usunięte.
FIRAuthErrorCodeUserTokenExpired Wskazuje, że token bieżącego użytkownika wygasł. Użytkownik mógł na przykład zmienić hasło do konta na innym urządzeniu. Musisz poprosić użytkownika o ponowne zalogowanie się na tym urządzeniu.
FIRAuthErrorCodeTooManyRequests Wskazuje, że żądanie zostało zablokowane po tym, jak z urządzenia wywołującego wysłano do serwerów Firebase Authentication nienormalną liczbę żądań. Za jakiś czas spróbuj ponownie.
FIRAuthErrorCodeInvalidAPIKey Wskazuje, że aplikacja została skonfigurowana przy użyciu nieprawidłowego klucza interfejsu API.
FIRAuthErrorCodeAppNotAuthorized Wskazuje, że aplikacja nie jest uprawniona do korzystania z Uwierzytelniania Firebase z podanym kluczem interfejsu API. Otwórz Konsolę interfejsów API Google i na karcie Credentials (Dane logowania) sprawdź, czy klucz interfejsu API, którego używasz, ma na białej liście identyfikator pakietu Twojej aplikacji.
FIRAuthErrorCodeKeychainError Wskazuje, że podczas uzyskiwania dostępu do pęku kluczy wystąpił błąd. Pola NSLocalizedFailureReasonErrorKey i NSUnderlyingErrorKey w słowniku NSError.userInfo będą zawierać więcej informacji o napotkanym błędzie.
FIRAuthErrorCodeInternalError Wskazuje, że wystąpił błąd wewnętrzny. Zgłoś błąd, podając cały obiekt NSError.

Kody błędów specyficzne dla metody

FIRAuth

fetchProvidersForEmail:completion:

Kod Znaczenie
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy.

signInWithEmail:password:completion:

Kod Znaczenie
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta e-mail i hasła nie są włączone. Włącz je w konsoli Firebase (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Sign-in method (Metoda logowania)).
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy.
FIRAuthErrorCodeUserDisabled Wskazuje, że konto użytkownika jest wyłączone.
FIRAuthErrorCodeWrongPassword Wskazuje, że użytkownik próbował zalogować się przy użyciu nieprawidłowego hasła.

signInWithCredential:completion:

Kod Znaczenie
FIRAuthErrorCodeInvalidCredential Wskazuje, że podane dane logowania są nieprawidłowe. Może się tak zdarzyć, jeśli dane logowania wygasły lub są nieprawidłowe.
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy, jeśli dane logowania są typu EmailPasswordAuthCredential.
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta u dostawcy tożsamości reprezentowanego przez dane logowania nie są włączone. Włącz je w konsoli Firebase (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Sign-in method (Metoda logowania)).
FIRAuthErrorCodeEmailAlreadyInUse Wskazuje, że adres e-mail potwierdzony przez dane logowania (np. adres e-mail w tokenie dostępu do Facebooka) jest już używany przez istniejące konto, którego nie można uwierzytelnić za pomocą tej metody logowania. Wywołaj fetchProvidersForEmail w przypadku adresu e-mail tego użytkownika, a następnie poproś go o zalogowanie się za pomocą jednego z zwróconych dostawców logowania. Ten błąd zostanie zgłoszony tylko wtedy, gdy w konsoli Firebase włączona jest opcja „One account per email address” (Jedno konto na adres e-mail) (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Settings (Ustawienia)).
FIRAuthErrorCodeUserDisabled Wskazuje, że konto użytkownika jest wyłączone.
FIRAuthErrorCodeWrongPassword Wskazuje, że użytkownik próbował zalogować się przy użyciu nieprawidłowego hasła, jeśli dane logowania są typu EmailPasswordAuthCredential.

signInAnonymouslyWithCompletion:

Kod Znaczenie
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta anonimowe nie są włączone. Włącz je w konsoli Firebase (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Sign-in method (Metoda logowania)).

signInWithCustomToken:completion:

Kod Znaczenie
FIRAuthErrorCodeInvalidCustomToken Wskazuje błąd weryfikacji tokena niestandardowego.
FIRAuthErrorCodeCustomTokenMismatch Wskazuje, że konto usługi i klucz interfejsu API należą do różnych projektów.

createUserWithEmail:password:completion:

Kod Znaczenie
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy.
FIRAuthErrorCodeEmailAlreadyInUse Wskazuje, że adres e-mail użyty do próby rejestracji już istnieje. Wywołaj fetchProvidersForEmail, aby sprawdzić, jakich mechanizmów logowania używał ten użytkownik, i poproś go o zalogowanie się za pomocą jednego z nich.
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta e-mail i hasła nie są włączone. Włącz je w konsoli Firebase (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Sign-in method (Metoda logowania)).
FIRAuthErrorCodeWeakPassword Wskazuje próbę ustawienia hasła, które jest uważane za zbyt słabe. Pole NSLocalizedFailureReasonErrorKey w obiekcie słownika NSError.userInfo będzie zawierać bardziej szczegółowe wyjaśnienie, które można wyświetlić użytkownikowi.

signOut:

Kod Znaczenie
FIRAuthErrorCodeKeychainError Wskazuje, że podczas uzyskiwania dostępu do pęku kluczy wystąpił błąd. Pola NSLocalizedFailureReasonErrorKey i NSUnderlyingErrorKey w słowniku NSError.userInfo będą zawierać więcej informacji o napotkanym błędzie.

FIRUser

Typowe błędy operacji FIRUser

Kod Znaczenie
FIRAuthErrorCodeInvalidUserToken Wskazuje, że token odświeżania zalogowanego użytkownika, który zawiera informacje o sesji, jest nieprawidłowy. Musisz poprosić użytkownika o ponowne zalogowanie się na tym urządzeniu.
FIRAuthErrorCodeUserDisabled Wskazuje, że konto użytkownika jest wyłączone i nie można go używać, dopóki nie zostanie ponownie włączone w konsoli Firebase (otwórz kartę Security > Authentication > Users).

reauthenticateWithCredential:completion:

Kod Znaczenie
FIRAuthErrorCodeInvalidCredential Wskazuje, że podane dane logowania są nieprawidłowe. Może się tak zdarzyć, jeśli dane logowania wygasły lub są nieprawidłowe.
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy, jeśli dane logowania są typu EmailPasswordAuthCredential.
FIRAuthErrorCodeWrongPassword Wskazuje, że użytkownik próbował ponownie uwierzytelnić się przy użyciu nieprawidłowego hasła, jeśli dane logowania są typu EmailPasswordAuthCredential.
FIRAuthErrorCodeUserMismatch Wskazuje, że podjęto próbę ponownego uwierzytelnienia użytkownika, który nie jest bieżącym użytkownikiem.
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta u dostawcy tożsamości reprezentowanego przez dane logowania nie są włączone. Włącz je w konsoli Firebase (otwórz Security > Authentication).
FIRAuthErrorCodeEmailAlreadyInUse Wskazuje, że adres e-mail potwierdzony przez dane logowania (np. adres e-mail w tokenie dostępu do Facebooka) jest już używany przez istniejące konto, którego nie można ponownie uwierzytelnić za pomocą tej metody logowania. Wywołaj fetchProvidersForEmail w przypadku adresu e-mail tego użytkownika, a następnie poproś go o zalogowanie się za pomocą jednego z zwróconych dostawców logowania. Ten błąd zostanie zgłoszony tylko wtedy, gdy w konsoli Firebase włączona jest opcja „One account per email address” (Jedno konto na adres e-mail) (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Settings (Ustawienia)).
FIRAuthErrorCodeUserDisabled Wskazuje, że konto użytkownika jest wyłączone.

updateEmail:completion:

Kod Znaczenie
FIRAuthErrorCodeEmailAlreadyInUse Wskazuje, że adres e-mail jest już używany przez inne konto.
FIRAuthErrorCodeInvalidEmail Wskazuje, że adres e-mail jest nieprawidłowy.
FIRAuthErrorCodeRequiresRecentLogin Aktualizowanie adresu e-mail użytkownika to operacja wymagająca zachowania bezpieczeństwa, która wymaga niedawnego zalogowania się użytkownika. Ten błąd wskazuje, że użytkownik nie zalogował się wystarczająco niedawno. Aby rozwiązać ten problem, ponownie uwierzytelnij użytkownika, wywołując reauthenticateWithCredential:completion: w FIRUser.

updatePassword:completion:

Kod Znaczenie
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że administrator wyłączył logowanie za pomocą określonego dostawcy tożsamości.
FIRAuthErrorCodeRequiresRecentLogin Aktualizowanie hasła użytkownika to operacja wymagająca zachowania bezpieczeństwa, która wymaga niedawnego zalogowania się użytkownika. Ten błąd wskazuje, że użytkownik nie zalogował się wystarczająco niedawno. Aby rozwiązać ten problem, ponownie uwierzytelnij użytkownika, wywołując reauthenticateWithCredential:completion: w FIRUser.
FIRAuthErrorCodeWeakPassword Wskazuje próbę ustawienia hasła, które jest uważane za zbyt słabe. Pole NSLocalizedFailureReasonErrorKey w obiekcie słownika NSError.userInfo będzie zawierać bardziej szczegółowe wyjaśnienie, które można wyświetlić użytkownikowi.

linkWithCredential:completion:

Kod Znaczenie
FIRAuthErrorCodeProviderAlreadyLinked Wskazuje próbę połączenia dostawcy typu, który jest już połączony z tym kontem.
FIRAuthErrorCodeCredentialAlreadyInUse Wskazuje próbę połączenia z danymi logowania, które zostały już połączone z innym kontem Firebase.
FIRAuthErrorCodeOperationNotAllowed Wskazuje, że konta u dostawcy tożsamości reprezentowanego przez dane logowania nie są włączone. Włącz je w konsoli Firebase (otwórz kartę Security (Zabezpieczenia) > Authentication (Uwierzytelnianie) > Sign-in method (Metoda logowania)).

Ta metoda może też zwracać kody błędów powiązane z updateEmail:completion: i updatePassword:completion: w FIRUser.

unlinkFromProvider:completion:

Kod Znaczenie
FIRAuthErrorCodeNoSuchProvider Wskazuje próbę odłączenia dostawcy, który nie jest połączony z kontem.
FIRAuthErrorCodeRequiresRecentLogin Aktualizowanie adresu e-mail to operacja wymagająca zachowania bezpieczeństwa, która wymaga niedawnego zalogowania się użytkownika. Ten błąd wskazuje, że użytkownik nie zalogował się wystarczająco niedawno. Aby rozwiązać ten problem, ponownie uwierzytelnij użytkownika, wywołując reauthenticateWithCredential:completion: w FIRUser.

sendEmailVerificationWithCompletion:

Kod Znaczenie
FIRAuthErrorCodeUserNotFound Wskazuje, że nie znaleziono konta użytkownika.

deleteWithCompletion:

Kod Znaczenie
FIRAuthErrorCodeRequiresRecentLogin Usuwanie konta użytkownika to operacja wymagająca zachowania bezpieczeństwa, która wymaga niedawnego zalogowania się użytkownika. Ten błąd wskazuje, że użytkownik nie zalogował się wystarczająco niedawno. Aby rozwiązać ten problem, ponownie uwierzytelnij użytkownika, wywołując reauthenticateWithCredential:completion: w FIRUser.