Vous pouvez utiliser Firebase Authentication pour connecter un utilisateur en lui envoyant un e-mail contenant un lien sur lequel il peut cliquer pour se connecter. Au cours de ce processus, l'adresse e-mail de l'utilisateur est également validée.
La connexion par e-mail présente de nombreux avantages :
- Inscription et connexion simples
- Réduction du risque de réutilisation de mots de passe dans plusieurs applications, ce qui peut compromettre la sécurité, même avec des mots de passe bien choisis
- Possibilité d'authentifier un utilisateur tout en vérifiant qu'il est le propriétaire légitime d'une adresse e-mail
- Un utilisateur n'a besoin que d'un compte de messagerie accessible pour se connecter. Il n'est pas nécessaire de posséder un numéro de téléphone ni un compte de réseau social.
- Un utilisateur peut se connecter de manière sécurisée sans avoir à fournir (ni à mémoriser) de mot de passe, ce qui peut être fastidieux sur un appareil mobile.
- Un utilisateur existant qui s'est déjà connecté avec un identifiant d'e-mail (mot de passe ou fédéré) peut passer à une connexion avec uniquement l'e-mail. Par exemple, un utilisateur qui a oublié son mot de passe peut toujours se connecter sans avoir à le réinitialiser.
Avant de commencer
Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.
- Dans Xcode, à partir de votre projet d'application ouvert, accédez à File > Add Packages (Fichier > Ajouter des packages).
- Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase pour Apple :
- Choisissez la Firebase Authentication bibliothèque.
- Ajoutez l'indicateur
-ObjCà la section Other Linker Flags (Autres indicateurs Linker) des paramètres de compilation de votre cible. - Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.
https://github.com/firebase/firebase-ios-sdk.git
Activer la connexion par lien d'e-mail pour votre projet Firebase
Pour connecter des utilisateurs par lien d'e-mail, vous devez d'abord activer le fournisseur d'e-mail et la méthode de connexion par lien d'e-mail pour votre projet Firebase :
- Dans la console Firebase, ouvrez la section Auth.
- Dans l'onglet Sign in method (Méthode de connexion), activez le fournisseur Adresse e-mail/Mot de passe. Notez que la connexion par adresse e-mail/mot de passe doit être activée pour utiliser la connexion par lien d'e-mail.
- Dans la même section, activez la méthode de connexion Lien envoyé par e-mail (connexion sans mot de passe).
- Cliquez sur Enregistrer.
Envoyer un lien d'authentification à l'adresse e-mail de l'utilisateur
Pour lancer le flux d'authentification, présentez à l'utilisateur une interface l'invitant à fournir son adresse e-mail, puis appelez sendSignInLink pour demander à Firebase d'envoyer le lien d'authentification à l'adresse e-mail de l'utilisateur.
Créez l'objet
ActionCodeSettings, qui fournit à Firebase des instructions sur la façon de créer le lien d'e-mail. Renseignez les champs ci-dessous comme suit :url: lien profond à intégrer et tout état supplémentaire à transmettre. Le domaine du lien doit être ajouté à la liste blanche dans la liste des domaines autorisés de la console Firebase, que vous trouverez en accédant à l'onglet "Méthode de connexion" (Authentification -> Méthode de connexion).
iOSBundleIDetandroidPackageName: aident Firebase Authentication à déterminer s'il doit créer un lien Web uniquement ou un lien mobile qui s'ouvre sur un appareil Android ou Apple.handleCodeInApp: défini sur "true". L'opération de connexion doit toujours être effectuée dans l'application, contrairement à d'autres actions par e-mail hors bande (réinitialisation du mot de passe et validation de l'adresse e-mail). En effet, à la fin du flux, l'utilisateur doit être connecté et son état d'authentification doit être conservé dans l'application.linkDomain: lorsque des domaines de lien personnalisés Hosting sont définis pour un projet, spécifiez celui à utiliser lorsque le lien doit être ouvert par une application mobile spécifique. Sinon, le domaine par défaut est automatiquement sélectionné (par exemple, ).PROJECT_ID.firebaseapp.comdynamicLinkDomain: obsolète. Ne spécifiez pas ce paramètre.
Swift
let actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://www.example.com") // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = true actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable: false, minimumVersion: "12")
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = YES; [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:NO minimumVersion:@"12"];
Pour en savoir plus sur
ActionCodeSettings, consultez la section Transmettre l'état dans les actions par e-mail.Demandez à l'utilisateur son adresse e-mail.
Envoyez le lien d'authentification à l'adresse e-mail de l'utilisateur et enregistrez-la au cas où l'utilisateur effectue la connexion par e-mail sur le même appareil.
Swift
Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in // ... if let error = error { self.showMessagePrompt(error.localizedDescription) return } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. UserDefaults.standard.set(email, forKey: "Email") self.showMessagePrompt("Check your email for link") // ... }
Objective-C
[[FIRAuth auth] sendSignInLinkToEmail:email actionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { // ... if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; [self showMessagePrompt:@"Check your email for link"]; // ... }];
Terminer la connexion avec le lien d'e-mail
Problèmes de sécurité
Pour éviter qu'un lien de connexion ne soit utilisé pour se connecter en tant qu'utilisateur non prévu ou sur un appareil non prévu, Firebase Auth exige que l'adresse e-mail de l'utilisateur soit fournie lors de la procédure de connexion. Pour que la connexion réussisse, cette adresse e-mail doit correspondre à celle à laquelle le lien de connexion a été envoyé à l'origine.
Vous pouvez simplifier ce flux pour les utilisateurs qui ouvrent le lien de connexion sur le même appareil que celui sur lequel ils ont demandé le lien, en stockant leur adresse e-mail localement lorsque vous envoyez l'e-mail de connexion. Utilisez ensuite cette adresse pour terminer le flux.
Une fois la connexion terminée, tout mécanisme de connexion non validé précédent sera supprimé de l'utilisateur et toutes les sessions existantes seront invalidées. Par exemple, si une personne a déjà créé un compte non validé avec la même adresse e-mail et le même mot de passe, le mot de passe de l'utilisateur sera supprimé pour empêcher l'usurpateur qui a revendiqué la propriété et créé ce compte non validé de se connecter à nouveau avec le même compte.
Terminer la connexion dans une application mobile Apple
Firebase Authentication utilise Firebase Hosting pour envoyer le lien d'e-mail à un appareil mobile. Pour terminer la connexion avec une application mobile, l'application doit être configurée pour détecter le lien d'application entrant, analyser le lien profond sous-jacent, puis terminer la connexion. Pour en savoir plus, consultez les liens universels et les domaines associés sur iOS.
Configurer Firebase Hosting
Firebase Authentication utilise les domaines Firebase Hosting lors de la création et de l'envoi d'un lien destiné à être ouvert dans une application mobile. Un domaine Firebase Hosting par défaut a déjà été configuré pour vous.
Configurez les domaines :Firebase Hosting
Dans la console Firebase, ouvrez la section « Hosting ».
Si vous souhaitez utiliser le domaine par défaut pour le lien d'e-mail qui s'ouvre dans les applications mobiles, accédez à votre site par défaut et notez votre domaine Hosting par défaut. Un domaine Hosting par défaut se présente généralement comme suit :
.PROJECT_ID.firebaseapp.comVous aurez besoin de cette valeur lorsque vous configurerez votre application pour intercepter le lien entrant.
Si vous souhaitez utiliser un domaine personnalisé pour le lien d'e-mail, vous pouvez en enregistrer un auprès de Firebase Hosting et l'utiliser pour le domaine du lien.
Configurer les applications Apple :
Vous devrez configurer le domaine choisi comme domaine associé pour les liens d'application. Pour configurer l'autorisation dans votre application, ouvrez l'onglet Signing & Capabilities (Signature et fonctionnalités) de la cible dans Xcode, puis ajoutez les domaines Firebase Hosting de l'étape précédente à la fonctionnalité "Domaines associés". Si vous utilisez le domaine Firebase Hosting par défaut, il s'agit de
.applinks:PROJECT_ID.firebaseapp.comPour en savoir plus, consultez la page Supporting associated domains (Assistance pour les domaines associés) sur le site de documentation d'Apple.
Valider le lien et se connecter
Une fois que vous avez reçu le lien comme décrit ci-dessus, vérifiez qu'il est destiné à l'authentification par lien d'e-mail et terminez la connexion.
Swift
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
Objective-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
Pour savoir comment gérer la connexion avec un lien d'e-mail dans une application Android, consultez le guide Android.
Pour savoir comment gérer la connexion avec un lien d'e-mail dans une application Web, consultez le guide Web.
Associer/réauthentifier avec un lien d'e-mail
Vous pouvez également associer cette méthode d'authentification à un utilisateur existant. Par exemple, un utilisateur qui s'est déjà authentifié auprès d'un autre fournisseur, tel qu'un numéro de téléphone, peut ajouter cette méthode de connexion à son compte existant.
La différence se situe dans la seconde moitié de l'opération :
Swift
let credential = EmailAuthCredential.credential(withEmail:email link:link) Auth.auth().currentUser?.link(with: credential) { authData, error in if (error) { // And error occurred during linking. return } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email link:link]; [FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during linking. return; } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }];
Vous pouvez également utiliser cette méthode pour réauthentifier un utilisateur de lien d'e-mail avant d'exécuter une opération sensible.
Swift
let credential = EmailAuthProvider.credential(withEmail:email link:link) Auth.auth().currentUser?.reauthenticate(with: credential) { authData, error in if (error) { // And error occurred during re-authentication. return } // The user was successfully re-authenticated. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthCredential credentialWithEmail:email link:link]; [FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during re-authentication return; } // The user was successfully re-authenticated. }];
Toutefois, comme le flux peut se terminer sur un autre appareil sur lequel l'utilisateur d'origine n'était pas connecté, il est possible qu'il ne soit pas terminé. Dans ce cas, un message d'erreur peut s'afficher pour forcer l'utilisateur à ouvrir le lien sur le même appareil. Vous pouvez transmettre un état dans le lien pour fournir des informations sur le type d'opération et l'UID de l'utilisateur.
Obsolète : Firebase Dynamic Links basée sur la validation
Avant la version 11.8.0 du SDK iOS Firebase Authentication, la fonctionnalité de connexion par lien d'e-mail s'appuyait sur Firebase Dynamic Links pour ouvrir les liens de connexion dans l'application appropriée. Ces liens de validation sont obsolètes, car Firebase Dynamic Links sera arrêté le 25 août 2025.
Si votre application utilise les anciens liens, vous devez migrer votre application vers le nouveau système basé sur Firebase Hosting.
Obsolète : différencier l'adresse e-mail/mot de passe du lien d'e-mail
Si vous avez créé votre projet le 15 septembre 2023 ou après, la protection contre l'énumération d'adresses e-mail est activée par défaut. Cette fonctionnalité améliore la sécurité des comptes utilisateur de votre projet, mais elle désactive la méthode fetchSignInMethodsForEmail(), que nous recommandions auparavant pour implémenter des flux d'abord avec l'identifiant.
Bien que vous puissiez désactiver la protection contre l'énumération d'adresses e-mail pour votre projet, nous vous le déconseillons.
Pour en savoir plus, consultez Activer ou désactiver la protection contre l'énumération d'adresses e-mail.
Étapes suivantes
Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associé aux identifiants (nom d'utilisateur et mot de passe, numéro de téléphone ou informations du fournisseur d'authentification) avec lesquels il s'est connecté. Ce nouveau compte est stocké dans votre projet Firebase et peut être utilisé pour identifier un utilisateur dans toutes les applications de votre projet, quelle que soit la méthode de connexion utilisée.
-
Dans vos applications, vous pouvez obtenir les informations de base du profil de l'utilisateur à partir de l'
Userobjet. Consultez Gérer les utilisateurs. Dans les règles de sécurité de votre Firebase Realtime Database et Cloud Storage Security Rules, vous pouvez obtenir l'ID utilisateur unique de l'utilisateur connecté à partir de la variable
auth, et l'utiliser pour contrôler les données auxquelles un utilisateur peut accéder.
Vous pouvez autoriser les utilisateurs à se connecter à votre application à l'aide de plusieurs fournisseurs d'authentification en associant les identifiants du fournisseur d'authentification à un compte utilisateur existant.
Pour déconnecter un utilisateur, appelez
signOut:.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Vous pouvez également ajouter du code de gestion des erreurs pour l'ensemble des erreurs d'authentification. Consultez Gérer les erreurs.