Gérer les utilisateurs dans Firebase

Créer un utilisateur

Vous créez un nouvel utilisateur dans votre projet Firebase en appelant la méthode CreateUserWithEmailAndPassword ou en connectant un utilisateur pour la première fois à l'aide d'un fournisseur d'identité fédéré, tel que Google Sign-In ou Facebook Login .

Vous pouvez également créer de nouveaux utilisateurs authentifiés par mot de passe à partir de la section Authentification de la console Firebase , sur la page 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 :

Firebase.Auth.FirebaseAuth auth;
Firebase.Auth.FirebaseUser user;

// Handle initialization of the necessary firebase modules:
void InitializeFirebase() {
  Debug.Log("Setting up Firebase Auth");
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

// Track state changes of the auth object.
void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
    if (!signedIn && user != null) {
      Debug.Log("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      Debug.Log("Signed in " + user.UserId);
    }
  }
}

// Handle removing subscription and reference to the Auth instance.
// Automatically called by a Monobehaviour after Destroy is called on it.
void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

En utilisant un écouteur, vous vous assurez que l'objet Auth ne se trouve pas dans un état intermédiaire, tel qu'une initialisation, lorsque vous obtenez l'utilisateur actuel.

Vous pouvez également obtenir l'utilisateur actuellement connecté en appelant CurrentUser . Si un utilisateur n'est pas connecté, CurrentUser renverra null. Si un utilisateur est déconnecté, IsValid() de l'utilisateur renverra false.

Conserver les informations d'identification d'un utilisateur

Les informations d'identification de l'utilisateur seront stockées dans le magasin de clés local une fois l'utilisateur connecté. Le cache local des informations d'identification de l'utilisateur peut être supprimé en déconnectant l'utilisateur. Le magasin de clés est spécifique à la plateforme :

Obtenir le profil d'un utilisateur

Pour obtenir les informations de profil d'un utilisateur, utilisez les méthodes d'accès d'une instance de Firebase.Auth.FirebaseUser . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string name = user.DisplayName;
  string email = user.Email;
  System.Uri photo_url = user.PhotoUrl;
  // 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 User.TokenAsync() instead.
  string uid = user.UserId;
}

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 liés à un utilisateur, utilisez la méthode ProviderData . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  foreach (var profile in user.ProviderData) {
    // Id of the provider (ex: google.com)
    string providerId = profile.ProviderId;

    // UID specific to the provider
    string uid = profile.UserId;

    // Name, email address, and profile photo Url
    string name = profile.DisplayName;
    string email = profile.Email;
    System.Uri photoUrl = profile.PhotoUrl;
  }
}

Mettre à jour le profil d'un utilisateur

Vous pouvez mettre à jour les informations de base du profil d'un utilisateur (le nom d'affichage de l'utilisateur et l'URL de la photo de profil) à l'aide de la méthode UpdateUserProfile . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  Firebase.Auth.UserProfile profile = new Firebase.Auth.UserProfile {
    DisplayName = "Jane Q. User",
    PhotoUrl = new System.Uri("https://example.com/jane-q-user/profile.jpg"),
  };
  user.UpdateUserProfileAsync(profile).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateUserProfileAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateUserProfileAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User profile updated successfully.");
  });
}

Définir l'adresse e-mail d'un utilisateur

Vous pouvez définir l'adresse e-mail d'un utilisateur avec la méthode UpdateEmail . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.UpdateEmailAsync("user@example.com").ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User email updated successfully.");
  });
}

Envoyer à un utilisateur un e-mail de vérification

Vous pouvez envoyer un e-mail de vérification d'adresse à un utilisateur avec la méthode SendEmailVerification . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.SendEmailVerificationAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendEmailVerificationAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendEmailVerificationAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Email sent successfully.");
  });
}

Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section Authentification de la console Firebase , sur la page Modèles d'e-mail. Consultez Modèles d'e-mail dans le centre d'aide Firebase.

Définir le mot de passe d'un utilisateur

Vous pouvez définir le mot de passe d'un utilisateur avec la méthode UpdatePassword . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
string newPassword = "SOME-SECURE-PASSWORD";
if (user != null) {
  user.UpdatePasswordAsync(newPassword).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdatePasswordAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdatePasswordAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password updated successfully.");
  });
}

Envoyer un e-mail de réinitialisation de mot de passe

Vous pouvez envoyer un e-mail de réinitialisation de mot de passe à un utilisateur avec la méthode SendPasswordResetEmail . Par exemple:

string emailAddress = "user@example.com";
if (user != null) {
  auth.SendPasswordResetEmailAsync(emailAddress).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendPasswordResetEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendPasswordResetEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password reset email sent successfully.");
  });
}

Vous pouvez personnaliser le modèle d'e-mail utilisé dans la section Authentification de la console Firebase , sur la page Modèles d'e-mail. Consultez Modèles d'e-mail dans le centre d'aide Firebase.

Vous pouvez également envoyer des e-mails de réinitialisation de mot de passe depuis la console Firebase.

Supprimer un utilisateur

Vous pouvez supprimer un compte utilisateur avec la méthode Delete . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.DeleteAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("DeleteAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("DeleteAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User deleted successfully.");
  });
}

Vous pouvez également supprimer des utilisateurs de la section Authentification de la console Firebase , sur la page Utilisateurs.

Réauthentifier un utilisateur

Certaines actions sensibles en matière 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 récemment connecté. Si vous effectuez l'une de ces actions et que l'utilisateur s'est connecté il y a trop longtemps, le l’action échoue.

Lorsque cela se produit, réauthentifiez l'utilisateur en obtenant de nouvelles informations d'identification de connexion de l'utilisateur et en transmettant les informations d'identification à Reauthenticate . Par exemple:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
Firebase.Auth.Credential credential =
    Firebase.Auth.EmailAuthProvider.GetCredential("user@example.com", "password1234");

if (user != null) {
  user.ReauthenticateAsync(credential).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("ReauthenticateAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("ReauthenticateAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User reauthenticated successfully.");
  });
}

Importer des comptes d'utilisateurs

Vous pouvez importer des comptes d'utilisateurs à partir d'un fichier dans votre projet Firebase à l'aide de la commande auth:import la CLI Firebase. Par exemple:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14