Benutzerdefinierter Lambda-Auslöser für E-Mail-Sender - Amazon Cognito

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Benutzerdefinierter Lambda-Auslöser für E-Mail-Sender

Wenn Sie Ihrem Benutzerpool einen benutzerdefinierten E-Mail-Absender-Trigger zuweisen, ruft Amazon Cognito statt des Standardverhaltens eine Lambda-Funktion auf, wenn ein Benutzerereignis das Senden einer E-Mail-Nachricht erfordert. Mit einem benutzerdefinierten Absender-Trigger kann Ihre AWS Lambda Funktion E-Mail-Benachrichtigungen über eine von Ihnen gewählte Methode und einen Anbieter an Ihre Benutzer senden. Der benutzerdefinierte Code Ihrer Funktion muss alle E-Mail-Nachrichten aus Ihrem Benutzerpool verarbeiten und versenden.

Dieser Trigger eignet sich für Szenarien, in denen Sie möglicherweise mehr Kontrolle darüber haben möchten, wie Ihr Benutzerpool E-Mail-Nachrichten sendet. Ihre Lambda-Funktion kann den Aufruf von Amazon SES SES-API-Vorgängen anpassen, z. B. wenn Sie mehrere verifizierte Identitäten oder Kreuzungen verwalten möchten. AWS-Regionen Ihre Funktion kann auch Nachrichten an ein anderes Übermittlungsmedium oder einen Drittanbieter-Service weiterleiten.

Informationen zur Konfiguration eines benutzerdefinierten E-Mail-Absender-Triggers finden Sie unterLambda-Trigger mit benutzerdefiniertem Absender aktivieren.

Benutzerdefinierte E-Mail-Sender-Lambda-Auslöser-Quellen

Die folgende Tabelle zeigt die auslösenden Ereignisse für benutzerdefinierte E-Mail-Auslöserquellen in Ihrem Lambda-Code.

TriggerSource value Ereignis
CustomEmailSender_SignUp Ein Benutzer meldet sich an und Amazon Cognito sendet eine Willkommensnachricht.
CustomEmailSender_Authentication Ein Benutzer meldet sich an und Amazon Cognito sendet einen Multi-Faktor-Authentifizierungscode (MFA).
CustomEmailSender_ForgotPassword Ein Benutzer fordert einen Code an, um sein Passwort zurückzusetzen.
CustomEmailSender_ResendCode Ein Benutzer fordert einen Ersatzcode für die Kontobestätigung an.
CustomEmailSender_UpdateUserAttribute Ein Benutzer aktualisiert eine E-Mail-Adresse oder ein Telefonnummernattribut und Amazon Cognito sendet einen Code zur Verifizierung des Attributs.
CustomEmailSender_VerifyUserAttribute Ein Benutzer erstellt eine neue E-Mail-Adresse oder ein Telefonnummernattribut und Amazon Cognito sendet einen Code zur Verifizierung des Attributs.
CustomEmailSender_AdminCreateUser Sie erstellen einen neuen Benutzer in Ihrem Benutzerpool und Amazon Cognito sendet ihm ein temporäres Passwort.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito erkennt einen Versuch, ein Benutzerkonto zu übernehmen, und sendet dem Benutzer eine Benachrichtigung.

Benutzerdefinierte Lambda-Auslöserparameter für SMS-Sender

Die Anforderung, die Amazon Cognito an diese Lambda-Funktion übergibt, ist eine Kombination der folgenden Parameter und der allgemeinen Parameter, die Amazon Cognito allen Anfragen hinzufügt.

JSON
{ "request": { "type": "customEmailSenderRequestV1", "code": "string", "clientMetadata": { "string": "string", . . . }, "userAttributes": { "string": "string", . . . } }

Benutzerdefinierte E-Mail-Sender-Anforderungsparameter

Typ

Die Anforderungsversion. Für ein benutzerdefiniertes E-Mail-Sender-Ereignis ist der Wert dieses Strings immer customEmailSenderRequestV1.

Code

Der verschlüsselte Code, den Ihre Funktion entschlüsseln und an Ihren Benutzer senden kann.

clientMetadata

Ein oder mehrere Schlüssel-Wert-Paare, die Sie als benutzerdefinierte Eingabe für den benutzerdefinierten E-Mail-Sender-Auslöser der Lambda-Funktion bereitstellen können. Um diese Daten an Ihre Lambda-Funktion zu übergeben, können Sie den ClientMetadata Parameter in den Aktionen AdminRespondToAuthChallengeund RespondToAuthChallengeAPI verwenden. Amazon Cognito bezieht keine Daten aus dem ClientMetadata Parameter in AdminInitiateAuthund InitiateAuthAPI-Operationen in die Anfrage ein, die es an die Post-Authentifizierungsfunktion weiterleitet.

Anmerkung

Amazon Cognito sendet bei Ereignissen mit ClientMetadata den folgenden Triggerquellen an benutzerdefinierte E-Mail-Auslösefunktionen:

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

Amazon Cognito sendet keine Trigger-Ereignisse mit ClientMetadata der Quelle CustomEmailSender_AccountTakeOverNotification ein.

userAttributes

Ein oder mehrere Schlüssel-Wert-Paare, die Benutzerattribute darstellen.

Benutzerdefinierte E-Mail-Sender-Antwortparameter

Amazon Cognito erwartet keine zusätzlichen Rückgabeinformationen in der benutzerdefinierten E-Mail-Sender-Antwort. Ihre Lambda-Funktion muss das Ereignis interpretieren und den Code entschlüsseln und dann den Nachrichteninhalt übermitteln. Eine typische Funktion stellt eine E-Mail-Nachricht zusammen und leitet sie an ein SMTP-Relay eines Drittanbieters weiter.

Codebeispiel

Das folgende Beispiel für Node.js verarbeitet ein E–Mail-Nachrichtenereignis in Ihrer benutzerdefinierten Lambda-Funktion für E-Mail-Sender. In diesem Beispiel wird davon ausgegangen, dass Ihre Funktion zwei Umgebungsvariablen definiert hat.

KEY_ID

Die ID des KMS-Schlüssels, den Sie zum Verschlüsseln und Entschlüsseln der Benutzercodes verwenden möchten.

KEY_ARN

Der Amazon-Ressourcenname (ARN) des KMS-Schlüssels, den Sie zum Verschlüsseln und Entschlüsseln von Benutzercodes verwenden möchten.

Um diese Funktion bereitzustellen
  1. Installieren Sie die neueste Version von NodeJS in Ihrem Developer Workspace.

  2. Erstellen Sie ein neues NodeJS-Projekt in Ihrem Workspace.

  3. Initialisieren Sie Ihr Projekt mit. npm init -y

  4. Erstellen Sie das Skript für die Lambda-Funktion:touch index.mjs.

  5. Fügen Sie den Inhalt des folgenden Beispiels in einindex.mjs.

  6. Laden Sie die Projektabhängigkeit herunter, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Komprimieren Sie das Projektverzeichnis in eine Datei:zip -r my_deployment_package.zip ..

  8. Stellen Sie die ZIP-Datei für Ihre Funktion bereit.

Diese Beispielfunktion entschlüsselt den Code und simuliert bei Anmeldeereignissen das Senden einer E-Mail-Nachricht an die E-Mail-Adresse des Benutzers.

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; } };