Vous pouvez déclencher des fonctions en réponse à la création et à la suppression de comptes utilisateur Firebase Authentication. Par exemple, vous pouvez envoyer un e-mail de bienvenue à un utilisateur qui vient de créer un compte dans votre application. Les exemples figurant sur cette page sont basés sur un exemple qui effectue cette opération. Cette fonction envoie des e-mails de bienvenue et de d'au revoir lors de la création et de la suppression de comptes.
Pour plus d'exemples de cas d'utilisation, consultez la section Que puis-je accomplir avec Cloud Functions ?
Déclencher une fonction à la création d'un utilisateur
Vous pouvez créer une fonction qui se déclenche lorsqu'un utilisateur Authentication est créé à l'aide du gestionnaire d'événements onUserCreated du sous-package firebase-functions/v2/identity :
const { onUserCreated } = require("firebase-functions/identity"); const { defineSecret } = require("firebase-functions/params"); const { logger } = require("firebase-functions"); const { sendWelcomeEmail } = require("./utils/myEmailService"); const emailApiKey = defineSecret("EMAIL_API_KEY"); exports.newUserWelcome = onUserCreated( { secrets: [emailApiKey] }, async (event) => { const { uid, email, displayName } = event.data; if (!email) { logger.log(`User ${uid} does not have an email address.`); return; } await sendWelcomeEmail(email, displayName); }, );
Les comptes Authentication déclenchent des événements de création d'utilisateurs pour Cloud Functions dans les cas suivants :
- Un utilisateur crée un compte de messagerie et un mot de passe.
- Un utilisateur se connecte pour la première fois à l'aide d'un fournisseur d'identité fédéré.
- Le développeur crée un compte à l'aide du SDK Admin.
- Un utilisateur se connecte à une nouvelle session d'authentification anonyme pour la première fois.
Un événement Cloud Functions n'est pas déclenché lorsqu'un utilisateur se connecte pour la première fois à l'aide d'un jeton personnalisé.
Configurer les options de déclencheur et le multitenancy
Vous pouvez configurer votre fonction en transmettant un objet d'options (AuthOptions) en tant que premier paramètre à onUserCreated :
/** * Sends a welcome email scoped to a specific tenant in Identity Platform. */ exports.sendWelcomeEmailToTenant = onUserCreated( { secrets: [emailApiKey], // Only trigger when a user is a member of this tenant tenantId: "my-tenant-id", }, async (event) => { const { uid, email, displayName } = event.data; // Customize the email for this tenant await sendWelcomeEmail(email, displayName, event.tenantId); }, ); /** * Sends a welcome email only to users not associated with any tenant. */ exports.sendWelcomeEmailNoTenant = onUserCreated( { secrets: [emailApiKey], // Only trigger when a user is NOT a member of a tenant tenantId: IS_NOT_TENANT, }, async (event) => { const { email, displayName } = event.data; // Send a generic welcome email await sendWelcomeEmail(email, displayName); }, );
Si votre projet utilise l'architecture mutualisée Identity Platform, vous pouvez définir le champ d'application du déclencheur :
- Projet par défaut (sans locataire) : définissez
tenantIdsurIS_NOT_TENANTpour n'écouter que les utilisateurs créés dans le projet par défaut. - Locataire spécifique : indiquez l'ID de chaîne du locataire (par exemple,
{ tenantId: "tenant-id-1" }) pour n'écouter que les utilisateurs créés dans ce locataire. - Tous les locataires et utilisateurs : si
tenantIdest omis, la fonction se déclenche lors des événements de création d'utilisateur pour tous les locataires et utilisateurs du projet par défaut.
En plus de tenantId, vous pouvez spécifier des options de configuration standards de 2e génération, y compris region, concurrency, cpu, memory, timeoutSeconds, minInstances, maxInstances et secrets.
Accéder aux attributs utilisateur
À partir des données utilisateur renvoyées à votre fonction, vous pouvez accéder à la liste des attributs utilisateur disponibles dans l'objet UserRecord de l'utilisateur nouvellement créé via event.data. Par exemple, vous pouvez obtenir l'adresse e-mail et le nom à afficher de l'utilisateur comme suit :
const { uid, email, displayName } = event.data;
Les déclencheurs d'authentification de 2e génération reçoivent un objet AuthEvent. En plus de event.data, vous pouvez accéder aux métadonnées d'événement, telles que :
event.id: identifiant unique de l'événement.event.type: type d'événement (google.firebase.auth.user.v2.created).event.time: code temporel ISO 8601 indiquant le moment où l'événement s'est produit.event.project: ID de projet Google Cloud.event.tenantId: ID du locataire Identity Platform associé à l'utilisateur, le cas échéant.
Déclencher une fonction à la suppression d'un utilisateur
Tout comme vous pouvez déclencher une fonction lors de la création d'un utilisateur, vous pouvez répondre aux événements de suppression d'utilisateur. Utilisez le gestionnaire d'événements onUserDeleted de firebase-functions/v2/identity comme indiqué ci-dessous :
const { onUserDeleted } = require("firebase-functions/identity"); const { defineSecret } = require("firebase-functions/params"); const { logger } = require("firebase-functions"); const { sendGoodbyeEmail } = require("./utils/myEmailService"); const emailApiKey = defineSecret("EMAIL_API_KEY"); exports.deletedUserFarewell = onUserDeleted( { secrets: [emailApiKey] }, async (event) => { const { uid, email, displayName } = event.data; if (!email) { logger.log(`User ${uid} does not have an email address.`); return; } await sendGoodbyeEmail(email, displayName); }, );
Comme pour onUserCreated, vous pouvez configurer onUserDeleted avec des options telles que { tenantId: IS_NOT_TENANT } pour limiter les déclencheurs aux utilisateurs du projet par défaut.
Déclencher des fonctions de blocage
Si vous êtes passé à Firebase Authentication with Identity Platform, vous pouvez étendre Firebase Authentication à l'aide de fonctions de blocage.
Les fonctions de blocage vous permettent d'exécuter un code personnalisé de manière synchrone qui modifie le résultat d'un utilisateur qui s'enregistre ou se connecte à votre application. Contrairement aux déclencheurs en arrière-plan, qui s'exécutent de manière asynchrone une fois l'événement terminé, les fonctions de blocage vous permettent d'empêcher un utilisateur de s'authentifier s'il ne répond pas à certains critères, ou de mettre à jour les informations et les revendications d'un utilisateur avant de les renvoyer à votre application cliente.
Bonnes pratiques pour les déclencheurs de 2e génération
Lorsque vous implémentez des déclencheurs d'authentification de 2e génération, tenez compte des bonnes pratiques suivantes :
- Tenir compte de la simultanéité : les instances Cloud Functions (2e génération) traitent les requêtes simultanées (80 requêtes simultanées par défaut lorsque le processeur est supérieur ou égal à 1). Assurez-vous que votre fonction ne repose pas sur un état mutable global entre les exécutions simultanées.
- Concevez vos fonctions pour qu'elles soient idempotentes : la diffusion d'événements dans la 2e génération s'effectue au moins une fois via Eventarc. Assurez-vous que vos fonctions sont idempotentes. Par exemple, vérifiez qu'un e-mail de bienvenue n'a pas déjà été envoyé ou qu'une entrée de base de données n'a pas déjà été initialisée avant d'effectuer des effets secondaires.
- Définissez le champ d'application des fonctions mutualisées : si votre application utilise l'architecture mutualisée Identity Platform, vérifiez si vos fonctions doivent gérer les événements pour tous les locataires ou uniquement pour certains d'entre eux. Utilisez
tenantId: IS_NOT_TENANTpour empêcher les utilisateurs du locataire de déclencher des fonctions destinées uniquement au projet principal. - Gérer les régions et l'allocation de ressources : spécifiez l'emplacement de la fonction (
region) pour minimiser la latence du réseau entre votre fournisseur d'authentification et votre environnement d'exécution de fonction.