Pemicu Lambda pengirim email kustom - Amazon Cognito

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pemicu Lambda pengirim email kustom

Saat Anda menetapkan pemicu pengirim email khusus ke kumpulan pengguna, Amazon Cognito akan memanggil fungsi Lambda, bukan perilaku defaultnya saat peristiwa pengguna mengharuskannya mengirim pesan email. Dengan pemicu pengirim khusus, AWS Lambda fungsi Anda dapat mengirim pemberitahuan email ke pengguna Anda melalui metode dan penyedia yang Anda pilih. Kode kustom fungsi Anda harus memproses dan mengirimkan semua pesan email dari kumpulan pengguna Anda.

Pemicu ini menyajikan skenario di mana Anda mungkin ingin memiliki kontrol yang lebih besar atas cara kumpulan pengguna Anda mengirim pesan email. Fungsi Lambda Anda dapat menyesuaikan panggilan ke operasi Amazon SES API, misalnya saat Anda ingin mengelola beberapa identitas terverifikasi atau silang. Wilayah AWS Fungsi Anda juga dapat mengarahkan pesan ke media pengiriman lain atau layanan pihak ketiga.

Untuk mempelajari cara mengonfigurasi pemicu pengirim email kustom, lihatMengaktifkan pemicu Lambda pengirim kustom.

Sumber pemicu Lambda pengirim email khusus

Tabel berikut menunjukkan peristiwa pemicu untuk sumber pemicu email kustom dalam kode Lambda Anda.

TriggerSource value Peristiwa
CustomEmailSender_SignUp Seorang pengguna mendaftar dan Amazon Cognito mengirimkan pesan selamat datang.
CustomEmailSender_Authentication Pengguna masuk dan Amazon Cognito mengirimkan kode otentikasi multi-faktor (MFA).
CustomEmailSender_ForgotPassword Seorang pengguna meminta kode untuk mengatur ulang kata sandi mereka.
CustomEmailSender_ResendCode Seorang pengguna meminta kode konfirmasi akun pengganti.
CustomEmailSender_UpdateUserAttribute Pengguna memperbarui alamat email atau atribut nomor telepon dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut.
CustomEmailSender_VerifyUserAttribute Pengguna membuat atribut alamat email atau nomor telepon baru dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut.
CustomEmailSender_AdminCreateUser Anda membuat pengguna baru di kumpulan pengguna Anda dan Amazon Cognito mengirimi mereka kata sandi sementara.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito mendeteksi upaya untuk mengambil alih akun pengguna dan mengirimkan pemberitahuan kepada pengguna.

Parameter pemicu Lambda pengirim email kustom

Permintaan yang diteruskan Amazon Cognito ke fungsi Lambda ini adalah kombinasi dari parameter di bawah ini dan parameter umum yang ditambahkan Amazon Cognito ke semua permintaan.

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

Parameter permintaan pengirim email kustom

jenis

Versi permintaan. Untuk acara pengirim email kustom, nilai string ini selalucustomEmailSenderRequestV1.

code

Kode terenkripsi yang fungsi Anda dapat mendekripsi dan mengirim ke pengguna Anda.

clientMetadata

Satu atau beberapa pasangan nilai kunci yang dapat Anda berikan sebagai input khusus ke pemicu fungsi Lambda pengirim email kustom. Untuk meneruskan data ini ke fungsi Lambda Anda, Anda dapat menggunakan ClientMetadata parameter dalam tindakan AdminRespondToAuthChallengedan RespondToAuthChallengeAPI. Amazon Cognito tidak menyertakan data dari ClientMetadata parameter dalam AdminInitiateAuthdan operasi InitiateAuthAPI dalam permintaan yang diteruskan ke fungsi otentikasi pos.

catatan

Amazon Cognito mengirim ClientMetadata ke fungsi pemicu email khusus dalam peristiwa dengan sumber pemicu berikut:

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

Amazon Cognito tidak mengirimkan ClientMetadata peristiwa pemicu dengan sumber. CustomEmailSender_AccountTakeOverNotification

userAttributes

Satu atau lebih pasangan kunci-nilai yang mewakili atribut pengguna.

Parameter respons pengirim email kustom

Amazon Cognito tidak mengharapkan informasi pengembalian tambahan apa pun dalam respons pengirim email khusus. Fungsi Lambda Anda harus menafsirkan peristiwa dan mendekripsi kode, lalu mengirimkan konten pesan. Fungsi tipikal merakit pesan email dan mengarahkannya ke relay SMTP pihak ketiga.

Contoh kode

Contoh Node.js berikut memproses peristiwa pesan email dalam fungsi Lambda pengirim email kustom Anda. Contoh ini mengasumsikan fungsi Anda memiliki dua variabel lingkungan yang ditentukan.

KEY_ID

ID kunci KMS yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.

KEY_ARN

Nama Sumber Daya Amazon (ARN) dari kunci KMS yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.

Untuk menerapkan fungsi ini
  1. Instal NodeJS versi terbaru di ruang kerja pengembang Anda.

  2. Buat proyek NodeJS baru di ruang kerja Anda.

  3. Inisialisasi proyek Anda dengannpm init -y.

  4. Buat skrip untuk fungsi Lambda:. touch index.mjs

  5. Tempelkan isi contoh di bawah ini ke dalamindex.mjs.

  6. Unduh ketergantungan proyek, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Zip direktori proyek ke dalam file:zip -r my_deployment_package.zip ..

  8. Menyebarkan file ZIP ke fungsi Anda.

Fungsi contoh ini mendekripsi kode dan, untuk acara pendaftaran, mensimulasikan pengiriman pesan email ke alamat email pengguna.

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