Gérer les utilisateurs dans Firebase

Créer un compte utilisateur

Vous pouvez créer un compte utilisateur dans votre projet Firebase en appelant la createUser méthode ou en connectant un utilisateur pour la première fois à l'aide d'un fournisseur d'identité fédéré, tel que la connexion Google ou la connexion Facebook.

Vous pouvez également créer des utilisateurs authentifiés par mot de passe dans la section "Authentication" (Authentification) de la console FirebaseFirebase, sur la page "Users" (Utilisateurs).

Obtenir l'utilisateur actuellement connecté

La méthode recommandée pour obtenir l'utilisateur actuel consiste à définir un écouteur sur l'objet Auth :

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objective-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

En utilisant un écouteur, vous vous assurez que l'objet Auth n'est pas dans un état intermédiaire (par exemple, l'initialisation) lorsque vous obtenez l'utilisateur actuel.

Vous pouvez également obtenir l'utilisateur actuellement connecté à l'aide de la propriété currentUser. Si aucun utilisateur n'est connecté, currentUser est nul :

Swift

if Auth.auth().currentUser != nil {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

Objective-C

if ([FIRAuth auth].currentUser) {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

Obtenir le profil d'un utilisateur

Pour obtenir les informations de profil d'un utilisateur, utilisez les propriétés d'une instance de FIRUser. Exemple :

Swift

let user = Auth.auth().currentUser
if let user = user {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;
if (user) {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

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 :

Swift

let userInfo = Auth.auth().currentUser?.providerData[indexPath.row]
cell?.textLabel?.text = userInfo?.providerID
// Provider-specific UID
cell?.detailTextLabel?.text = userInfo?.uid

Objective-C

id<FIRUserInfo> userInfo = [FIRAuth auth].currentUser.providerData[indexPath.row];
cell.textLabel.text = [userInfo providerID];
// Provider-specific UID
cell.detailTextLabel.text = [userInfo uid];

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 de la classe UserProfileChangeRequest. Exemple :

Swift

let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = displayName
changeRequest?.commitChanges { error in
  // ...
}

Objective-C

FIRUserProfileChangeRequest *changeRequest = [[FIRAuth auth].currentUser profileChangeRequest];
changeRequest.displayName = userInput;
[changeRequest commitChangesWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

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 :

Swift

Auth.auth().currentUser?.updateEmail(to: email) { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser updateEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

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 sendEmailVerificationWithCompletion:. Exemple :

Swift

Auth.auth().currentUser?.sendEmailVerification { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser sendEmailVerificationWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section "Authentication" (Authentification) de la Firebase console, 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 d'action 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 Auth avant d'envoyer l'e-mail. Exemple :

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objective-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

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 :

Swift

Auth.auth().currentUser?.updatePassword(to: password) { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser updatePassword:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

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 sendPasswordReset. Exemple :

Swift

Auth.auth().sendPasswordReset(withEmail: email) { error in
  // ...
}

Objective-C

[[FIRAuth auth] sendPasswordResetWithEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section "Authentication" (Authentification) de la Firebase console, 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 d'action 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 Auth avant d'envoyer l'e-mail. Exemple :

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objective-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

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 :

Swift

let user = Auth.auth().currentUser

user?.delete { error in
  if let error = error {
    // An error happened.
  } else {
    // Account deleted.
  }
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;

[user deleteWithCompletion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // Account deleted.
  }
}];

Vous pouvez également supprimer des utilisateurs dans la section "Authentication" (Authentification) de la Firebase console, 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 l'erreur FIRAuthErrorCodeCredentialTooOld s'affiche. Dans ce cas, réauthentifiez l'utilisateur en obtenant de nouveaux identifiants de connexion et en les transmettant à reauthenticate. Exemple :

Swift

let user = Auth.auth().currentUser
var credential: AuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;
FIRAuthCredential *credential;

// Prompt the user to re-provide their sign-in credentials

[user reauthenticateWithCredential:credential completion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}];

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