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 ou à l'aide du SDK Admin .

Obtenir l'utilisateur actuellement connecté

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

Web modular API

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth();
onAuthStateChanged(auth, (user) => {
  if (user) {
    // User is signed in, see docs for a list of available properties
    // https://firebase.google.com/docs/reference/js/auth.user
    const uid = user.uid;
    // ...
  } else {
    // User is signed out
    // ...
  }
});

Web namespaced API

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User is signed in, see docs for a list of available properties
    // https://firebase.google.com/docs/reference/js/v8/firebase.User
    var uid = user.uid;
    // ...
  } else {
    // User is signed out
    // ...
  }
});

En utilisant un observateur, vous vous assurez que l'objet Auth n'est pas dans un état intermédiaire, tel que l'initialisation, lorsque vous obtenez l'utilisateur actuel. Lorsque vous utilisez signInWithRedirect , l'observateur onAuthStateChanged attend la résolution getRedirectResult avant de se déclencher.

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

Web modular API

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

if (user) {
  // User is signed in, see docs for a list of available properties
  // https://firebase.google.com/docs/reference/js/auth.user
  // ...
} else {
  // No user is signed in.
}

Web namespaced API

const user = firebase.auth().currentUser;

if (user) {
  // User is signed in, see docs for a list of available properties
  // https://firebase.google.com/docs/reference/js/v8/firebase.User
  // ...
} 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 User . Par exemple:

Web modular API

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;
if (user !== null) {
  // The user object has basic properties such as display name, email, etc.
  const displayName = user.displayName;
  const email = user.email;
  const photoURL = user.photoURL;
  const emailVerified = user.emailVerified;

  // 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.getToken() instead.
  const uid = user.uid;
}

Web namespaced API

const user = firebase.auth().currentUser;
if (user !== null) {
  // The user object has basic properties such as display name, email, etc.
  const displayName = user.displayName;
  const email = user.email;
  const photoURL = user.photoURL;
  const emailVerified = user.emailVerified;

  // 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.getIdToken() instead.
  const uid = user.uid;
}

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 propriété providerData . Par exemple:

Web modular API

import { getAuth } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

if (user !== null) {
  user.providerData.forEach((profile) => {
    console.log("Sign-in provider: " + profile.providerId);
    console.log("  Provider-specific UID: " + profile.uid);
    console.log("  Name: " + profile.displayName);
    console.log("  Email: " + profile.email);
    console.log("  Photo URL: " + profile.photoURL);
  });
}

Web namespaced API

const user = firebase.auth().currentUser;

if (user !== null) {
  user.providerData.forEach((profile) => {
    console.log("Sign-in provider: " + profile.providerId);
    console.log("  Provider-specific UID: " + profile.uid);
    console.log("  Name: " + profile.displayName);
    console.log("  Email: " + profile.email);
    console.log("  Photo URL: " + 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) avec la méthode updateProfile . Par exemple:

Web modular API

import { getAuth, updateProfile } from "firebase/auth";
const auth = getAuth();
updateProfile(auth.currentUser, {
  displayName: "Jane Q. User", photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
  // Profile updated!
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});

Web namespaced API

const user = firebase.auth().currentUser;

user.updateProfile({
  displayName: "Jane Q. User",
  photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
  // Update successful
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});  

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:

Web modular API

import { getAuth, updateEmail } from "firebase/auth";
const auth = getAuth();
updateEmail(auth.currentUser, "user@example.com").then(() => {
  // Email updated!
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});

Web namespaced API

const user = firebase.auth().currentUser;

user.updateEmail("user@example.com").then(() => {
  // Update successful
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});

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:

Web modular API

import { getAuth, sendEmailVerification } from "firebase/auth";

const auth = getAuth();
sendEmailVerification(auth.currentUser)
  .then(() => {
    // Email verification sent!
    // ...
  });

Web namespaced API

firebase.auth().currentUser.sendEmailVerification()
  .then(() => {
    // Email verification sent!
    // ...
  });

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.

Il est également possible de transmettre l'état via une URL continue pour rediriger vers l'application lors de l'envoi d'un e-mail de vérification.

De plus, vous pouvez localiser l'e-mail de vérification en mettant à jour le code de langue sur l'instance d'authentification avant d'envoyer l'e-mail. Par exemple:

Web modular API

import { getAuth } from "firebase/auth";

const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();

Web namespaced API

firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

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:

Web modular API

import { getAuth, updatePassword } from "firebase/auth";

const auth = getAuth();

const user = auth.currentUser;
const newPassword = getASecureRandomPassword();

updatePassword(user, newPassword).then(() => {
  // Update successful.
}).catch((error) => {
  // An error ocurred
  // ...
});

Web namespaced API

const user = firebase.auth().currentUser;
const newPassword = getASecureRandomPassword();

user.updatePassword(newPassword).then(() => {
  // Update successful.
}).catch((error) => {
  // An error ocurred
  // ...
});

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:

Web modular API

import { getAuth, sendPasswordResetEmail } from "firebase/auth";

const auth = getAuth();
sendPasswordResetEmail(auth, email)
  .then(() => {
    // Password reset email sent!
    // ..
  })
  .catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    // ..
  });

Web namespaced API

firebase.auth().sendPasswordResetEmail(email)
  .then(() => {
    // Password reset email sent!
    // ..
  })
  .catch((error) => {
    var errorCode = error.code;
    var errorMessage = error.message;
    // ..
  });

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.

Il est également possible de transmettre l'état via une URL continue pour rediriger vers l'application lors de l'envoi d'un e-mail de réinitialisation de mot de passe.

De plus, vous pouvez 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. Par exemple:

Web modular API

import { getAuth } from "firebase/auth";

const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();

Web namespaced API

firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

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:

Web modular API

import { getAuth, deleteUser } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

deleteUser(user).then(() => {
  // User deleted.
}).catch((error) => {
  // An error ocurred
  // ...
});

Web namespaced API

const user = firebase.auth().currentUser;

user.delete().then(() => {
  // User deleted.
}).catch((error) => {
  // An error ocurred
  // ...
});

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 avec une erreur. 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 à reauthenticateWithCredential . Par exemple:

Web modular API

import { getAuth, reauthenticateWithCredential } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

// TODO(you): prompt the user to re-provide their sign-in credentials
const credential = promptForCredentials();

reauthenticateWithCredential(user, credential).then(() => {
  // User re-authenticated.
}).catch((error) => {
  // An error ocurred
  // ...
});

Web namespaced API

const user = firebase.auth().currentUser;

// TODO(you): prompt the user to re-provide their sign-in credentials
const credential = promptForCredentials();

user.reauthenticateWithCredential(credential).then(() => {
  // User re-authenticated.
}).catch((error) => {
  // An error occurred
  // ...
});

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