Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déclencheur Lambda expéditeur d'e-mail personnalisé
Lorsque vous attribuez un déclencheur d'expéditeur d'e-mails personnalisé à votre groupe d'utilisateurs, Amazon Cognito invoque une fonction Lambda à la place de son comportement par défaut lorsqu'un événement utilisateur nécessite l'envoi d'un e-mail. Grâce à un déclencheur d'expéditeur personnalisé, votre AWS Lambda fonction peut envoyer des notifications par e-mail à vos utilisateurs par le biais d'une méthode et d'un fournisseur de votre choix. Le code personnalisé de votre fonction doit traiter et livrer tous les e-mails de votre groupe d'utilisateurs.
Ce déclencheur répond aux scénarios dans lesquels vous souhaiterez peut-être avoir un meilleur contrôle sur la manière dont votre groupe d'utilisateurs envoie des e-mails. Votre fonction Lambda peut personnaliser l'appel aux opérations d'API Amazon SES, par exemple lorsque vous souhaitez gérer plusieurs identités vérifiées ou croisées. Régions AWS Votre fonction peut également rediriger les messages vers un autre support de diffusion ou un service tiers.
Pour savoir comment configurer un déclencheur d'expéditeur d'e-mail personnalisé, consultezActivation des déclencheurs Lambda personnalisés pour les expéditeurs.
Sources du déclencheur Lambda expéditeur d'e-mail personnalisé
Le tableau suivant montre les événements de déclenchement pour les sources du déclencheur d'e-mail personnalisé dans votre code Lambda.
TriggerSource value |
Événement |
---|---|
CustomEmailSender_SignUp |
Un utilisateur s'inscrit et Amazon Cognito envoie un message de bienvenue. |
CustomEmailSender_Authentication |
Un utilisateur se connecte et Amazon Cognito envoie un code d'authentification multifactorielle (MFA). |
CustomEmailSender_ForgotPassword |
Un utilisateur demande un code pour réinitialiser son mot de passe. |
CustomEmailSender_ResendCode |
Un utilisateur demande un code de confirmation de compte de remplacement. |
CustomEmailSender_UpdateUserAttribute |
Un utilisateur met à jour un attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut. |
CustomEmailSender_VerifyUserAttribute |
Un utilisateur crée un nouvel attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut. |
CustomEmailSender_AdminCreateUser |
Vous créez un nouvel utilisateur dans votre groupe d'utilisateurs et Amazon Cognito lui envoie un mot de passe temporaire. |
CustomEmailSender_AccountTakeOverNotification |
Amazon Cognito détecte une tentative de prise de contrôle d'un compte d'utilisateur et envoie une notification à l'utilisateur. |
Paramètres de déclencheur Lambda d'expéditeur d'e-mail personnalisé
La demande qu’Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des paramètres courants qu’Amazon Cognito ajoute à toutes les demandes.
Paramètres de demande d'expéditeur d'e-mail personnalisé
- type
-
Version de la demande. Pour un événement d'expéditeur d'e-mail personnalisé, la valeur de cette chaîne est toujours
customEmailSenderRequestV1
. - code
-
Code chiffré que votre fonction peut déchiffrer et envoyer à votre utilisateur.
- clientMetadata
-
Une ou plusieurs paires clé-valeur que vous pouvez fournir en tant qu'entrée personnalisée au déclencheur de la fonction Lambda d'expéditeur d'e-mail personnalisé. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le ClientMetadata paramètre dans les actions AdminRespondToAuthChallengeet RespondToAuthChallengeAPI. Amazon Cognito n'inclut pas les données issues du ClientMetadata paramètre AdminInitiateAuthet des opérations d'InitiateAuthAPI dans la demande transmise à la fonction de post-authentification.
Note
Amazon Cognito envoie des fonctions
ClientMetadata
de déclenchement d'e-mail personnalisées lors d'événements impliquant les sources de déclenchement suivantes :-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
Amazon Cognito n'envoie
ClientMetadata
pas d'événements déclencheurs avec leur source.CustomEmailSender_AccountTakeOverNotification
-
- userAttributes
-
Une ou plusieurs paires clé-valeur qui représentent les attributs utilisateur.
Paramètres de réponse d'expéditeur d'e-mail personnalisé
Amazon Cognito n'attend aucune information en retour supplémentaire dans la réponse d'expéditeur d'e-mail personnalisé. Votre fonction Lambda doit interpréter l'événement et déchiffrer le code, puis transmettre le contenu du message. Une fonction classique assemble un message électronique et le dirige vers un relais SMTP tiers.
Exemple de code
L'exemple Node.js suivant traite un événement d'e-mail dans votre fonction Lambda d'expéditeur d'e-mail personnalisé. Cet exemple suppose que votre fonction possède deux variables d'environnement définies.
KEY_ID
-
L'ID de la clé KMS que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.
KEY_ARN
-
L'Amazon Resource Name (ARN) de la clé KMS que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.
Pour déployer cette fonction
-
Installez la dernière version de NodeJS dans votre espace de travail de développeur.
-
Créez un nouveau projet NodeJS dans votre espace de travail.
-
Initialisez votre projet avec
npm init -y
. -
Créez le script pour la fonction Lambda :.
touch index.mjs
-
Collez le contenu de l'exemple ci-dessous dans
index.mjs
. -
Téléchargez la dépendance du projet, AWS Encryption SDK :
npm install @aws-crypto/client-node
. -
Compressez le répertoire du projet dans un fichier :
zip -r my_deployment_package.zip .
.
Cet exemple de fonction déchiffre le code et, pour les événements d'inscription, simule l'envoi d'un message électronique à l'adresse e-mail de l'utilisateur.
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node'; // Configure the encryption SDK client with the KMS key from the environment variables const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT ); const generatorKeyId = process.env.KEY_ID; const keyIds = [process.env.KEY_ARN]; const keyring = new KmsKeyringNode({ generatorKeyId, keyIds }); // Example function to simulate sending email. // This example logs message details to CloudWatch Logs from your Lambda function. // Update this function with custom logic that sends an email message to 'emailaddress' with body 'message'. const sendEmail = async (emailAddress, message) => { // Log the destination with the email address masked. console.log(`Simulating email send to ${emailAddress.replace(/[^@.]/g, '*')}`); // Log the message with the code masked. console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`); // Simulate API delay await new Promise(resolve => setTimeout(resolve, 100)); console.log('Email sent successfully'); return true; }; export const handler = async (event) => { try { // Decrypt the secret code using encryption SDK let plainTextCode; if (event.request.code) { const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64')); plainTextCode = Buffer.from(plaintext).toString('utf-8'); } // Handle different trigger sources if (event.triggerSource == 'CustomEmailSender_SignUp') { const emailAddress = event.request.userAttributes.email; const message = `Welcome! Your verification code is: ${plainTextCode}`; await sendEmail(emailAddress, message); } else if (event.triggerSource == 'CustomEmailSender_ResendCode') { // Handle resend code } else if (event.triggerSource == 'CustomEmailSender_ForgotPassword') { // Handle forgot password } else if (event.triggerSource == 'CustomEmailSender_UpdateUserAttribute') { // Handle update attribute } else if (event.triggerSource == 'CustomEmailSender_VerifyUserAttribute') { // Handle verify attribute } else if (event.triggerSource == 'CustomEmailSender_AdminCreateUser') { // Handle admin create user } else if (event.triggerSource == 'CustomEmailSender_Authentication') { // Handle authentication } else if (event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification') { // Handle account takeover notification } return; } catch (error) { console.error('Error in custom email sender:', error); throw error; } };