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.
Parameter permintaan pengirim email kustom
- jenis
-
Versi permintaan. Untuk acara pengirim email kustom, nilai string ini selalu
customEmailSenderRequestV1
. - 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
-
Instal NodeJS versi terbaru di ruang kerja pengembang Anda.
-
Buat proyek NodeJS baru di ruang kerja Anda.
-
Inisialisasi proyek Anda dengan
npm init -y
. -
Buat skrip untuk fungsi Lambda:.
touch index.mjs
-
Tempelkan isi contoh di bawah ini ke dalam
index.mjs
. -
Unduh ketergantungan proyek, AWS Encryption SDK:
npm install @aws-crypto/client-node
. -
Zip direktori proyek ke dalam file:
zip -r my_deployment_package.zip .
.
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; } };