As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Acionador do Lambda de remetente de e-mail personalizado
Quando você atribui um acionador de remetente de e-mail personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem de e-mail. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por e-mail para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens de e-mail do grupo de usuários.
Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens de e-mail. Sua função do Lambda pode personalizar a chamada para as operações da API do Amazon SES, por exemplo, quando você deseja gerenciar várias identidades verificadas ou Regiões da AWS cruzadas. Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.
Para saber como configurar um gatilho de remetente de e-mail personalizado, consulteAtivando gatilhos Lambda personalizados do remetente.
Fontes do acionador do Lambda de remetente de e-mail personalizado
A tabela a seguir mostra o evento de acionamento de fontes de acionadores de e-mail personalizado no código do Lambda.
TriggerSource value |
Event |
---|---|
CustomEmailSender_SignUp |
Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas. |
CustomEmailSender_Authentication |
Um usuário faz login e o Amazon Cognito envia um código de autenticação multifator (MFA). |
CustomEmailSender_ForgotPassword |
Um usuário solicita um código para redefinir a senha. |
CustomEmailSender_ResendCode |
Um usuário solicita um código de confirmação da conta de substituição. |
CustomEmailSender_UpdateUserAttribute |
Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. |
CustomEmailSender_VerifyUserAttribute |
Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. |
CustomEmailSender_AdminCreateUser |
Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária. |
CustomEmailSender_AccountTakeOverNotification |
O Amazon Cognito detecta uma tentativa de tomada de controle de uma conta de usuário e envia uma notificação ao usuário. |
Parâmetros do acionador do Lambda de remetente personalizado de e-mail
A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos parâmetros comuns que o Amazon Cognito adiciona a todas as solicitações.
Parâmetros de solicitação do remetente personalizado de e-mail
- type
-
A versão da solicitação. Para um evento de remetente personalizado de e-mail, o valor dessa string é sempre
customEmailSenderRequestV1
. - código
-
O código criptografado que sua função pode descriptografar e enviar ao usuário.
- clientMetadata
-
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de migração do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações AdminRespondToAuthChallengee da RespondToAuthChallengeAPI. O Amazon Cognito não inclui dados do ClientMetadata parâmetro AdminInitiateAuthe operações de InitiateAuthAPI na solicitação que ele passa para a função de pós-autenticação.
nota
O Amazon Cognito envia
ClientMetadata
para funções personalizadas de acionador de e-mail personalizado em eventos com as seguintes fontes de acionador:-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
O Amazon Cognito não envia
ClientMetadata
em eventos de acionador comCustomEmailSender_AccountTakeOverNotification
de origem. -
- userAttributes
-
Um ou mais pares de chave-valor que representam atributos de usuário.
Parâmetros de resposta do remetente personalizado de e-mail
O Amazon Cognito não espera nenhuma outra informação de retorno na resposta do remetente personalizado de e-mail. Sua função do Lambda deve interpretar o evento, descriptografar o código e, em seguida, entregar o conteúdo da mensagem. Uma função típica reúne uma mensagem de e-mail e a direciona para um retransmissor SMTP de terceiros.
Exemplo de código
O exemplo de Node.js a seguir processa um evento de mensagem de e-mail na função do Lambda de remetente personalizado de e-mail. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.
KEY_ID
-
O ID da chave KMS que você deseja usar para criptografar e descriptografar os códigos dos seus usuários.
KEY_ARN
-
O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.
Para implantar essa função
-
Instale a versão mais recente do NodeJS em seu espaço de trabalho de desenvolvedor.
-
Crie um novo projeto NodeJS em seu espaço de trabalho.
-
Inicialize seu projeto com
npm init -y
. -
Crie o script para a função Lambda:.
touch index.mjs
-
Cole o conteúdo do exemplo abaixo em
index.mjs
. -
Baixe a dependência do projeto, AWS Encryption SDK:
npm install @aws-crypto/client-node
. -
Compacte o diretório do projeto em um arquivo:
zip -r my_deployment_package.zip .
.
Essa função de exemplo decifra o código e, para eventos de inscrição, simula o envio de uma mensagem de e-mail para o endereço de e-mail do usuário.
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; } };