Créer un compte utilisateur
Vous pouvez créer un compte utilisateur dans votre projet Firebase de quatre manières :
- Appelez la méthode
createUserWithEmailAndPassword(). - Connectez un utilisateur pour la première fois à l'aide d'un fournisseur d'identité fédéré, tel que Se connecter avec Google, Facebook Login ou Apple.
Vous pouvez également créer des utilisateurs authentifiés par mot de passe dans la section "Authentication" (Authentification) de la console Firebase, sur la page "Users" (Utilisateurs).
Obtenir le profil d'un utilisateur
Pour obtenir les informations de profil d'un utilisateur, utilisez les propriétés de User. Vous pouvez obtenir un objet User représentant l'utilisateur actuel de trois manières :
Les flux
authStateChanges,idTokenChangesetuserChanges: vos écouteurs recevront l'objetUseractuel ounullsi aucun utilisateur n'est authentifié :FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });Au démarrage de l'application, un événement se déclenche une fois que les identifiants de l'utilisateur (le cas échéant) ont été restaurés à partir du stockage local. Cela signifie que vos écouteurs sont toujours appelés lorsque l'état de l'utilisateur est initialisé. Ensuite, chaque fois que l'état d'authentification change, un nouvel événement est déclenché avec l'état de l'utilisateur mis à jour.
En écoutant l'état d'authentification, vous pouvez créer une interface utilisateur qui réagit à ces changements d'état. Ne placez pas
authStateChanges().listen(...)directement dans la méthode de compilation d'un widget, car cela créera un nouvel abonnement à chaque recompilation. Si vous devez mettre à jour l'interface utilisateur en réponse à l'état d'authentification, utilisez unStreamBuilder:StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: user.uid); }, )Cette approche garantit que l'arborescence des widgets se recompilera automatiquement lorsque l'état d'authentification de l'utilisateur changera.
L'objet
UserCredentialrenvoyé par les méthodes d'authentification (signIn-) : l'objetUserCredentialpossède une propriétéuseravec l'objetUseractuel :final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);La propriété
currentUserde l'instanceFirebaseAuth: si vous êtes sûr que l' utilisateur est actuellement connecté, vous pouvez accéder à l'objetUserà partir de la propriétécurrentUser:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }La propriété
currentUserpeut êtrenullpour deux raisons :- L'utilisateur n'est pas connecté.
- L'objet d'authentification n'a pas terminé son initialisation. Si vous utilisez un écouteur pour suivre l'état de connexion de l'utilisateur, vous n'avez pas besoin de gérer ce cas.
Obtenir les informations de profil spécifiques au fournisseur d'un utilisateur
Pour obtenir les informations de profil récupérées auprès des fournisseurs de connexion associés à un utilisateur, utilisez la propriété providerData. Exemple :
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
Mettre à jour le profil d'un utilisateur
Vous pouvez mettre à jour les informations de profil de base d'un utilisateur (son nom à afficher
et l'URL de sa photo de profil) à l'aide des méthodes update-. Exemple :
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
Définir l'adresse e-mail d'un utilisateur
Vous pouvez définir l'adresse e-mail d'un utilisateur à l'aide de la méthode updateEmail(). Exemple :
await user?.updateEmail("janeq@example.com");
Envoyer un e-mail de validation à un utilisateur
Vous pouvez envoyer un e-mail de validation d'adresse à un utilisateur à l'aide de la méthode sendEmailVerification(). Exemple :
await user?.sendEmailVerification();
Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section "Authentication" (Authentification) de la console Firebase, sur la page "Email Templates" (Modèles d'e-mail). Consultez Modèles d'e-mail dans le Centre d'aide Firebase.
Il est également possible de transmettre un état via une URL de continuation pour rediriger l'utilisateur vers l'application lors de l'envoi d'un e-mail de validation.
Vous pouvez également localiser l'e-mail de validation en mettant à jour le code de langue sur l'instance d'authentification avant d'envoyer l'e-mail. Exemple :
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Définir le mot de passe d'un utilisateur
Vous pouvez définir le mot de passe d'un utilisateur à l'aide de la méthode updatePassword(). Exemple :
await user?.updatePassword(newPassword);
Envoyer un e-mail de réinitialisation du mot de passe
Vous pouvez envoyer un e-mail de réinitialisation du mot de passe à un utilisateur à l'aide de la méthode sendPasswordResetEmail(). Exemple :
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section "Authentication" (Authentification) de la console Firebase, sur la page "Email Templates" (Modèles d'e-mail). Consultez Modèles d'e-mail dans le Centre d'aide Firebase.
Il est également possible de transmettre un état via une URL de continuation pour rediriger l'utilisateur vers l'application lors de l'envoi d'un e-mail de réinitialisation du mot de passe.
Vous pouvez également localiser l'e-mail de réinitialisation du mot de passe en mettant à jour le code de langue sur l'instance d'authentification avant d'envoyer l'e-mail. Exemple :
await FirebaseAuth.instance.setLanguageCode("fr");
Vous pouvez également envoyer des e-mails de réinitialisation du mot de passe depuis la console Firebase.
Supprimer un compte utilisateur
Vous pouvez supprimer un compte utilisateur à l'aide de la méthode delete(). Exemple :
await user?.delete();
Vous pouvez également supprimer des utilisateurs dans la section "Authentication" (Authentification) de la console Firebase, sur la page "Users" (Utilisateurs).
Réauthentifier un utilisateur
Certaines actions sensibles en termes de sécurité, telles que
la suppression d'un compte,
la définition d'une adresse e-mail principale, et
la modification d'un mot de passe—nécessitent que l'utilisateur se soit
connecté récemment. Si vous effectuez l'une de ces actions et que l'utilisateur s'est connecté il y a trop longtemps, l'action échoue et génère une FirebaseAuthException avec le code requires-recent-login.
Dans ce cas, réauthentifiez l'utilisateur en obtenant de nouveaux identifiants de connexion et en les transmettant à reauthenticate. Exemple :
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
Importer des comptes utilisateur
Vous pouvez importer des comptes utilisateur à partir d'un fichier dans votre projet Firebase à l'aide de la
commande auth:import de la CLI Firebase. Exemple :
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14