Gérer les erreurs d'authentification des plates-formes Firebase Apple

Si le rappel de fin sur les méthodes Authentication reçoit un argument NSError qui n'est pas nul, une erreur s'est produite. Pour envoyer la logique de gestion des erreurs appropriée dans votre code de production, comparez le code d'erreur aux erreurs courantes et aux erreurs spécifiques à la méthode listées ci-dessous.

Certaines erreurs peuvent être résolues par des actions spécifiques de l'utilisateur. Par exemple, FIRAuthErrorCodeUserTokenExpired peut être résolue en reconnectant l'utilisateur, et FIRAuthErrorCodeWrongPassword en lui demandant de fournir le bon mot de passe.

Sauf dans le cas de FIRAuthErrorCodeNetworkError ou FIRAuthErrorCodeTooManyRequests, une nouvelle tentative d'opération ayant échoué avec les mêmes arguments ne réussira jamais. Ne faites aucune hypothèse sur le fait que l'opération a pris effet ou non côté serveur.

Lorsque vous examinez ou enregistrez des erreurs, consultez le dictionnaire userInfo. FIRAuthErrorNameKey contient une chaîne de nom d'erreur multiplateforme qui peut être utilisée pour identifier l'erreur. NSLocalizedDescriptionKey contient une description de l'erreur. Cette description est destinée au développeur, et non à l'utilisateur. NSUnderlyingErrorKey contient l'erreur sous-jacente qui a provoqué l'erreur en question, si une erreur sous-jacente est présente.

Outre les champs principaux listés ci-dessus, le dictionnaire userInfo peut contenir d'autres champs qui peuvent vous être utiles pour diagnostiquer les erreurs.

Codes d'erreur communs à toutes les méthodes API

Code Signification
FIRAuthErrorCodeNetworkError Indique qu'une erreur réseau s'est produite lors de l'opération.
FIRAuthErrorCodeUserNotFound Indique que le compte utilisateur n'a pas été trouvé. Cela peut se produire si le compte utilisateur a été supprimé.
FIRAuthErrorCodeUserTokenExpired Indique que le jeton de l'utilisateur actuel a expiré. Par exemple, l'utilisateur peut avoir modifié le mot de passe de son compte sur un autre appareil. Vous devez inviter l'utilisateur à se reconnecter sur cet appareil.
FIRAuthErrorCodeTooManyRequests Indique que la requête a été bloquée après qu'un nombre anormal de requêtes ont été envoyées par l'appareil appelant aux serveurs Firebase Authentication. Réessayez après un certain temps.
FIRAuthErrorCodeInvalidAPIKey Indique que l'application a été configurée avec une clé API non valide.
FIRAuthErrorCodeAppNotAuthorized Indique que l'application n'est pas autorisée à utiliser Firebase Authentication avec la clé API fournie. Accédez à la console Google APIs et vérifiez sous l'onglet "Identifiants" que l'ID du bundle de votre application figure sur la liste blanche de la clé API que vous utilisez.
FIRAuthErrorCodeKeychainError Indique qu'une erreur s'est produite lors de l'accès au trousseau. Les champs NSLocalizedFailureReasonErrorKey et NSUnderlyingErrorKey du dictionnaire NSError.userInfo contiennent plus d'informations sur l'erreur rencontrée.
FIRAuthErrorCodeInternalError Indique qu'une erreur interne s'est produite. Veuillez signaler l'erreur avec l'objet NSError complet.

Codes d'erreur spécifiques à la méthode

FIRAuth

fetchProvidersForEmail:completion:

Code Signification
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée.

signInWithEmail:password:completion:

Code Signification
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes avec adresse e-mail et mot de passe ne sont pas activés. Activez-les dans la console Firebase (accédez à l'onglet Sécurité > Authentification > Méthode de connexion).
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée.
FIRAuthErrorCodeUserDisabled Indique que le compte de l'utilisateur est désactivé.
FIRAuthErrorCodeWrongPassword Indique que l'utilisateur a tenté de se connecter avec un mot de passe incorrect.

signInWithCredential:completion:

Code Signification
FIRAuthErrorCodeInvalidCredential Indique que l'identifiant fourni n'est pas valide. Cela peut se produire s'il a expiré ou s'il n'est pas correctement formaté.
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée, si l'identifiant est de type EmailPasswordAuthCredential.
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes avec le fournisseur d'identité représenté par l'identifiant ne sont pas activés. Activez-les dans la console Firebase (accédez à l'onglet Sécurité > Authentification > Méthode de connexion).
FIRAuthErrorCodeEmailAlreadyInUse Indique que l'adresse e-mail revendiquée par l'identifiant (par exemple, l'adresse e-mail dans un jeton d'accès Facebook) est déjà utilisée par un compte existant, qui ne peut pas être authentifié avec cette méthode de connexion. Appelez fetchProvidersForEmail pour l'adresse e-mail de cet utilisateur, puis invitez-le à se connecter avec l'un des fournisseurs de connexion renvoyés. Cette erreur ne sera générée que si l'option "Un compte par adresse e-mail" est activée dans la Firebase console (accédez à l'onglet Sécurité > Authentification > Paramètres).
FIRAuthErrorCodeUserDisabled Indique que le compte de l'utilisateur est désactivé.
FIRAuthErrorCodeWrongPassword Indique que l'utilisateur a tenté de se connecter avec un mot de passe incorrect, si l'identifiant est de type EmailPasswordAuthCredential.

signInAnonymouslyWithCompletion:

Code Signification
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes anonymes ne sont pas activés. Activez-les dans la console Firebase (accédez à l'onglet Sécurité > Authentification > Méthode de connexion).

signInWithCustomToken:completion:

Code Signification
FIRAuthErrorCodeInvalidCustomToken Indique une erreur de validation avec le jeton personnalisé.
FIRAuthErrorCodeCustomTokenMismatch Indique que le compte de service et la clé API appartiennent à des projets différents.

createUserWithEmail:password:completion:

Code Signification
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée.
FIRAuthErrorCodeEmailAlreadyInUse Indique que l'adresse e-mail utilisée pour tenter de s'inscrire existe déjà. Appelez fetchProvidersForEmail pour vérifier les mécanismes de connexion utilisés par cet utilisateur, puis invitez-le à se connecter avec l'un d'eux.
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes avec adresse e-mail et mot de passe ne sont pas activés. Activez-les dans la console Firebase (accédez à l'onglet Sécurité > Authentification > Méthode de connexion).
FIRAuthErrorCodeWeakPassword Indique une tentative de définition d'un mot de passe considéré comme trop faible. Le champ NSLocalizedFailureReasonErrorKey de l'objet de dictionnaire NSError.userInfo contient une explication plus détaillée qui peut être affichée à l'utilisateur.

signOut:

Code Signification
FIRAuthErrorCodeKeychainError Indique qu'une erreur s'est produite lors de l'accès au trousseau. Les champs NSLocalizedFailureReasonErrorKey et NSUnderlyingErrorKey du dictionnaire NSError.userInfo contiennent plus d'informations sur l'erreur rencontrée.

FIRUser

Erreurs courantes pour les opérations FIRUser

Code Signification
FIRAuthErrorCodeInvalidUserToken Indique que le jeton d'actualisation de l'utilisateur connecté, qui contient les informations de session, n'est pas valide. Vous devez inviter l'utilisateur à se reconnecter sur cet appareil.
FIRAuthErrorCodeUserDisabled Indique que le compte de l'utilisateur est désactivé et ne peut plus être utilisé tant qu'il n'est pas réactivé dans la Firebase console (accédez à l'onglet Sécurité > Authentification > Utilisateurs).

reauthenticateWithCredential:completion:

Code Signification
FIRAuthErrorCodeInvalidCredential Indique que l'identifiant fourni n'est pas valide. Cela peut se produire s'il a expiré ou s'il n'est pas correctement formaté.
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée, si l'identifiant est de type EmailPasswordAuthCredential.
FIRAuthErrorCodeWrongPassword Indique que l'utilisateur a tenté de se réauthentifier avec un mot de passe incorrect, si l'identifiant est de type EmailPasswordAuthCredential.
FIRAuthErrorCodeUserMismatch Indique qu'une tentative de réauthentification a été effectuée avec un utilisateur qui n'est pas l'utilisateur actuel.
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes avec le fournisseur d'identité représenté par l'identifiant ne sont pas activés. Activez-les dans la console Firebase (accédez à Sécurité > Authentification).
FIRAuthErrorCodeEmailAlreadyInUse Indique que l'adresse e-mail revendiquée par l'identifiant (par exemple, l'adresse e-mail dans un jeton d'accès Facebook) est déjà utilisée par un compte existant, qui ne peut pas être réauthentifié avec cette méthode de connexion. Appelez fetchProvidersForEmail pour l'adresse e-mail de cet utilisateur, puis invitez-le à se connecter avec l'un des fournisseurs de connexion renvoyés. Cette erreur ne sera générée que si l'option "Un compte par adresse e-mail" est activée dans la Firebase console (accédez à l'onglet Sécurité > Authentification > Paramètres).
FIRAuthErrorCodeUserDisabled Indique que le compte de l'utilisateur est désactivé.

updateEmail:completion:

Code Signification
FIRAuthErrorCodeEmailAlreadyInUse Indique que l'adresse e-mail est déjà utilisée par un autre compte.
FIRAuthErrorCodeInvalidEmail Indique que l'adresse e-mail n'est pas correctement formatée.
FIRAuthErrorCodeRequiresRecentLogin La mise à jour de l'adresse e-mail d'un utilisateur est une opération sensible en termes de sécurité qui nécessite une connexion récente de l'utilisateur. Cette erreur indique que l'utilisateur ne s'est pas connecté assez récemment. Pour résoudre ce problème, réauthentifiez l'utilisateur en appelant reauthenticateWithCredential:completion: sur FIRUser.

updatePassword:completion:

Code Signification
FIRAuthErrorCodeOperationNotAllowed Indique que l'administrateur a désactivé la connexion avec le fournisseur d'identité spécifié.
FIRAuthErrorCodeRequiresRecentLogin La mise à jour du mot de passe d'un utilisateur est une opération sensible en termes de sécurité qui nécessite une connexion récente de l'utilisateur. Cette erreur indique que l'utilisateur ne s'est pas connecté assez récemment. Pour résoudre ce problème, réauthentifiez l'utilisateur en appelant reauthenticateWithCredential:completion: sur FIRUser.
FIRAuthErrorCodeWeakPassword Indique une tentative de définition d'un mot de passe considéré comme trop faible. Le champ NSLocalizedFailureReasonErrorKey de l'objet de dictionnaire NSError.userInfo contient une explication plus détaillée qui peut être affichée à l'utilisateur.

linkWithCredential:completion:

Code Signification
FIRAuthErrorCodeProviderAlreadyLinked Indique une tentative d'association d'un fournisseur d'un type déjà associé à ce compte.
FIRAuthErrorCodeCredentialAlreadyInUse Indique une tentative d'association avec un identifiant déjà associé à un autre compte Firebase.
FIRAuthErrorCodeOperationNotAllowed Indique que les comptes avec le fournisseur d'identité représenté par l'identifiant ne sont pas activés. Activez-les dans la console Firebase (accédez à l'onglet Sécurité > Authentification > Méthode de connexion).

Cette méthode peut également renvoyer des codes d'erreur associés à updateEmail:completion: et updatePassword:completion: sur FIRUser.

unlinkFromProvider:completion:

Code Signification
FIRAuthErrorCodeNoSuchProvider Indique une tentative de dissociation d'un fournisseur qui n'est pas associé au compte.
FIRAuthErrorCodeRequiresRecentLogin La mise à jour de l'adresse e-mail est une opération sensible en termes de sécurité qui nécessite une connexion récente de l'utilisateur. Cette erreur indique que l'utilisateur ne s'est pas connecté assez récemment. Pour résoudre ce problème, réauthentifiez l'utilisateur en appelant reauthenticateWithCredential:completion: sur FIRUser.

sendEmailVerificationWithCompletion:

Code Signification
FIRAuthErrorCodeUserNotFound Indique que le compte utilisateur n'a pas été trouvé.

deleteWithCompletion:

Code Signification
FIRAuthErrorCodeRequiresRecentLogin La suppression d'un compte utilisateur est une opération sensible en termes de sécurité qui nécessite une connexion récente de l'utilisateur. Cette erreur indique que l'utilisateur ne s'est pas connecté assez récemment. Pour résoudre ce problème, réauthentifiez l'utilisateur en appelant reauthenticateWithCredential:completion: sur FIRUser.