Acionador do Lambda de pré-cadastro - Amazon Cognito

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 pré-cadastro

Talvez você queira personalizar o processo de inscrição em grupos de usuários que têm opções de inscrição por autoatendimento. Alguns usos comuns do gatilho de pré-inscrição são realizar análises e registros personalizados de novos usuários, aplicar padrões de segurança e governança ou vincular usuários de um IdP de terceiros a um perfil de usuário consolidado. Você também pode ter usuários confiáveis que não precisam passar por verificação e confirmação.

Pouco antes de o Amazon Cognito cadastrar um novo usuário local ou federado, ele ativa a função Lambda de pré-inscrição. Como parte do processo de inscrição, você pode usar essa função para analisar o evento de login com lógica personalizada e modificar ou negar o novo usuário.

Fluxos do Lambda de pré-cadastro

Fluxo de cadastro do cliente

Acionamento do Lambda de pré-cadastro: fluxo do cliente

Fluxo de cadastro do servidor

Fluxo do Lambda de pré-cadastro: fluxo de servidor

A solicitação inclui dados de validação do cliente. Esses dados vêm dos ValidationData valores passados para o grupo de usuários SignUp e AdminCreateUser API os métodos.

Parâmetros do acionador do Lambda de pré-cadastro

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.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . } }, "response": { "autoConfirmUser": "boolean", "autoVerifyPhone": "boolean", "autoVerifyEmail": "boolean" } }

Parâmetros de solicitação de pré-cadastro

userAttributes

Um ou mais pares de nome-valor que representam atributos de usuário. Os nomes de atributo são as chaves.

validationData

Um ou mais pares de chave-valor com dados de atributos do usuário que a aplicação passou para o Amazon Cognito na solicitação para criar um usuário. Envie essas informações para sua função Lambda no ValidationData parâmetro de sua solicitação AdminCreateUserou SignUpAPI.

O Amazon Cognito não define seus ValidationData dados como atributos do usuário que você cria. ValidationData são informações temporárias do usuário que você fornece para fins de seu gatilho Lambda de pré-inscrição.

clientMetadata

Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionamento de pré-cadastro. Você pode passar esses dados para sua função Lambda usando o ClientMetadata parâmetro nas seguintes API ações: AdminCreateUser, AdminRespondToAuthChallengeForgotPassword, e. SignUp

Parâmetros de resposta de pré-cadastro

Na resposta, você pode definir autoConfirmUser para true se quiser confirmar o usuário automaticamente. Você pode definir autoVerifyEmail como true para verificar o e-mail do usuário automaticamente. Você pode definir autoVerifyPhone como true para verificar automaticamente o número de telefone do usuário.

nota

Parâmetros autoVerifyPhone de resposta autoVerifyEmail e autoConfirmUser são ignorados pelo Amazon Cognito quando a função Lambda de pré-inscrição é acionada pelo. AdminCreateUser API

autoConfirmUser

Definido como true para confirmar o usuário automaticamente; do contrário, defina-o como false.

autoVerifyEmail

Defina como true para especificar como verificado o e-mail de um usuário que está se cadastrando ou, do contrário, defina como false. Se autoVerifyEmail for definido como true, o atributo email deverá ter um valor válido, não nulo. Caso contrário, ocorrerá um erro e o usuário não poderá concluir o cadastro.

Se o atributo email for selecionado como um alias, será criado um alias para o e-mail do usuário quando autoVerifyEmail for definido. Se já houver um alias com esse endereço de e-mail, ele será movido para o novo usuário e o endereço de e-mail do usuário anterior será marcado como não verificado. Para obter mais informações, consulte Personalização dos atributos de login.

autoVerifyPhone

Defina como true para definir como verificado o número de telefone de um usuário que está se cadastrando; do contrário, defina-o como false. Se autoVerifyPhone for definido como true, o atributo phone_number deverá ter um valor válido, não nulo. Caso contrário, ocorrerá um erro e o usuário não poderá concluir o cadastro.

Se o atributo phone_number for selecionado como um alias, este será criado para o número de telefone do usuário quando autoVerifyPhone for definido. Se um alias com esse número de telefone já existir, o alias será movido para o novo usuário e o número de telefone do usuário anterior será marcado como não verificado. Para obter mais informações, consulte Personalização dos atributos de login.

Tutoriais de cadastro

A função Lambda de pré-cadastro é acionada antes que o usuário se cadastre. Veja esses tutoriais de inscrição no Amazon Cognito para JavaScript Android e iOS.

Plataforma Tutorial
JavaScript Identidade SDK Inscrever usuários com JavaScript
Identidade Android SDK Inscrever usuários com Android
Identidade iOS SDK Inscrever usuários com iOS

Exemplo de pré-cadastro: confirmação automática de usuários em um domínio registrado

Você pode usar o acionador do Lambda de pré-cadastro para adicionar lógica personalizada para validar novos usuários que se cadastram em seu grupo de usuários. Este é um exemplo de JavaScript programa que mostra como inscrever um novo usuário. Ele invoca um acionador do Lambda de pré-cadastro como parte da autenticação.

JavaScript
var attributeList = []; var dataEmail = { Name: "email", Value: "...", // your email here }; var dataPhoneNumber = { Name: "phone_number", Value: "...", // your phone number here with +country code and no delimiters in front }; var dataEmailDomain = { Name: "custom:domain", Value: "example.com", }; var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail); var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute( dataPhoneNumber ); var attributeEmailDomain = new AmazonCognitoIdentity.CognitoUserAttribute( dataEmailDomain ); attributeList.push(attributeEmail); attributeList.push(attributePhoneNumber); attributeList.push(attributeEmailDomain); var cognitoUser; userPool.signUp( "username", "password", attributeList, null, function (err, result) { if (err) { alert(err); return; } cognitoUser = result.user; console.log("user name is " + cognitoUser.getUsername()); } );

Esse é um exemplo de acionador do Lambda chamado logo antes do cadastro com o acionador do Lambda de pré-cadastro do grupo de usuários. Ele usa um atributo personalizado custom:domain para confirmar automaticamente novos usuários de um determinado domínio de e-mail. Os novos usuários que não estiverem no domínio personalizado serão adicionados ao seu grupo de usuários, mas não automaticamente confirmados.

Node.js
exports.handler = (event, context, callback) => { // Set the user pool autoConfirmUser flag after validating the email domain event.response.autoConfirmUser = false; // Split the email address so we can compare domains var address = event.request.userAttributes.email.split("@"); // This example uses a custom attribute "custom:domain" if (event.request.userAttributes.hasOwnProperty("custom:domain")) { if (event.request.userAttributes["custom:domain"] === address[1]) { event.response.autoConfirmUser = true; } } // Return to Amazon Cognito callback(null, event); };
Python
def lambda_handler(event, context): # It sets the user pool autoConfirmUser flag after validating the email domain event['response']['autoConfirmUser'] = False # Split the email address so we can compare domains address = event['request']['userAttributes']['email'].split('@') # This example uses a custom attribute 'custom:domain' if 'custom:domain' in event['request']['userAttributes']: if event['request']['userAttributes']['custom:domain'] == address[1]: event['response']['autoConfirmUser'] = True # Return to Amazon Cognito return event

O Amazon Cognito transmite informações de evento para a função Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

JSON
{ "request": { "userAttributes": { "email": "testuser@example.com", "custom:domain": "example.com" } }, "response": {} }

Exemplo de pré-cadastro: confirmação e verificação automáticas de todos os usuários

Este exemplo confirma todos os usuários e define os atributos email e phone_number do usuário como verificados, se o atributo estiver presente. Além disso, se o alias estiver habilitado, eles serão criados para phone_number e email quando a verificação automática for definida.

nota

Se um alias com o mesmo número de telefone já existir, o alias será movido para o novo usuário e o phone_number do usuário anterior será marcado como não verificado. O mesmo se aplica para endereços de e-mail. Para evitar que isso aconteça, você pode usar os grupos de usuários ListUsers APIpara ver se há um usuário existente que já está usando o número de telefone ou endereço de e-mail do novo usuário como alias.

Node.js
const handler = async (event) => { // Confirm the user event.response.autoConfirmUser = true; // Set the email as verified if it is in the request if (Object.hasOwn(event.request.userAttributes, "email")) { event.response.autoVerifyEmail = true; } // Set the phone number as verified if it is in the request if (Object.hasOwn(event.request.userAttributes, "phone_number")) { event.response.autoVerifyPhone = true; } return event; }; export { handler };
Python
def lambda_handler(event, context): # Confirm the user event['response']['autoConfirmUser'] = True # Set the email as verified if it is in the request if 'email' in event['request']['userAttributes']: event['response']['autoVerifyEmail'] = True # Set the phone number as verified if it is in the request if 'phone_number' in event['request']['userAttributes']: event['response']['autoVerifyPhone'] = True # Return to Amazon Cognito return event

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

JSON
{ "request": { "userAttributes": { "email": "user@example.com", "phone_number": "+12065550100" } }, "response": {} }

Exemplo de pré-cadastro: negar cadastro se o nome de usuário tiver menos de cinco caracteres

Esse exemplo verifica a extensão do nome de usuário em uma solicitação de cadastro. O exemplo retornará um erro se o usuário tiver inserido um nome com menos de cinco caracteres.

Node.js
exports.handler = (event, context, callback) => { // Impose a condition that the minimum length of the username is 5 is imposed on all user pools. if (event.userName.length < 5) { var error = new Error("Cannot register users with username less than the minimum length of 5"); // Return error to Amazon Cognito callback(error, event); } // Return to Amazon Cognito callback(null, event); };
Python
def lambda_handler(event, context): if len(event['userName']) < 5: raise Exception("Cannot register users with username less than the minimum length of 5") # Return to Amazon Cognito return event

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

JSON
{ "userName": "rroe", "response": {} }