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.
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 QuelleCustomEmailSender_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
-
Installieren Sie die neueste Version von NodeJS in Ihrem Developer Workspace.
-
Erstellen Sie ein neues NodeJS-Projekt in Ihrem Workspace.
-
Initialisieren Sie Ihr Projekt mit.
npm init -y
-
Erstellen Sie das Skript für die Lambda-Funktion:
touch index.mjs
. -
Fügen Sie den Inhalt des folgenden Beispiels in ein
index.mjs
. -
Laden Sie die Projektabhängigkeit herunter, AWS Encryption SDK:
npm install @aws-crypto/client-node
. -
Komprimieren Sie das Projektverzeichnis in eine Datei:
zip -r my_deployment_package.zip .
.
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; } };