Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Trigger Lambda del mittente di e-mail personalizzato
Quando assegni un trigger del mittente dell'e-mail personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche e-mail agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi e-mail del pool di utenti.
Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi e-mail. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API di Amazon SES, ad esempio quando desideri gestire più identità verificate o incrociate. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.
Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. Attivazione dei trigger Lambda personalizzati del mittente
Origini dei trigger Lambda del mittente di e-mail personalizzato
La tabella che segue mostra gli eventi di attivazione per le origini dei trigger delle e-mail personalizzate nel codice Lambda.
TriggerSource value |
Evento |
---|---|
CustomEmailSender_SignUp |
Un utente si registra e Amazon Cognito invia un messaggio di benvenuto. |
CustomEmailSender_Authentication |
Un utente accede e Amazon Cognito invia un codice di autenticazione a più fattori (MFA). |
CustomEmailSender_ForgotPassword |
Un utente richiede un codice per reimpostare la password. |
CustomEmailSender_ResendCode |
Un utente richiede un codice di conferma dell'account sostitutivo. |
CustomEmailSender_UpdateUserAttribute |
Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. |
CustomEmailSender_VerifyUserAttribute |
Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. |
CustomEmailSender_AdminCreateUser |
Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea. |
CustomEmailSender_AccountTakeOverNotification |
Amazon Cognito rileva il tentativo di prendere il controllo di un account utente e invia una notifica all'utente. |
Parametri del trigger Lambda del mittente di e-mail personalizzato
La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei parametri comuni aggiunti da Amazon Cognito a tutte le richieste.
Parametri della richiesta del mittente di e-mail personalizzato
- tipo
-
La versione della richiesta. Per un evento del mittente di e-mail personalizzato, il valore di questa stringa è sempre
customEmailSenderRequestV1
. - code
-
Il codice crittografato che la funzione può decrittografare e inviare all'utente.
- clientMetadata
-
Una o più coppie chiave-valore che puoi fornire come input personalizzato al trigger della funzione Lambda del mittente di e-mail personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni AdminRespondToAuthChallengee RespondToAuthChallengeAPI. Amazon Cognito non include i dati del ClientMetadata parametro AdminInitiateAuthe le operazioni InitiateAuthAPI nella richiesta che passa alla funzione di post-autenticazione.
Nota
Amazon Cognito invia
ClientMetadata
a e-mail personalizzate funzioni di attivazione in caso di eventi con le seguenti fonti di attivazione:-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
Amazon Cognito non invia
ClientMetadata
eventi trigger con l'origine.CustomEmailSender_AccountTakeOverNotification
-
- userAttributes
-
Una o più coppie chiave-valore che rappresentano gli attributi utente.
Parametri di risposta del mittente di e-mail personalizzato
Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta del mittente di e-mail personalizzato. La funzione Lambda deve interpretare l'evento e decrittografare il codice, quindi recapitare il contenuto del messaggio. Una funzione tipica assembla un messaggio e-mail e lo indirizza a un relay SMTP di terze parti.
esempio di codice
Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio e-mail nella funzione Lambda del mittente di e-mail personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.
KEY_ID
-
L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.
KEY_ARN
-
Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.
Per implementare questa funzione
-
Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.
-
Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.
-
Inizializza il tuo progetto con.
npm init -y
-
Crea lo script per la funzione Lambda:.
touch index.mjs
-
Incolla il contenuto dell'esempio seguente in
index.mjs
. -
Scarica la dipendenza del progetto, AWS Encryption SDK:
npm install @aws-crypto/client-node
. -
Comprimi la cartella del progetto in un file:
zip -r my_deployment_package.zip .
.
Questa funzione di esempio decrittografa il codice e, per gli eventi di iscrizione, simula l'invio di un messaggio e-mail all'indirizzo e-mail dell'utente.
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; } };