Déclencheur Lambda Avant l'inscription - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déclencheur Lambda Avant l'inscription

Peu avant qu'Amazon Cognito inscrive un nouvel utilisateur, le service active la fonction AWS Lambda de pré-inscription. Dans le cadre du processus d'inscription, vous pouvez utiliser cette fonction pour effectuer une validation personnalisée et, en fonction des résultats de cette validation, accepter ou rejeter la demande d'enregistrement.

Flux Lambda Avant l'inscription

Flux d'inscription client


                    Déclencheur Lambda Avant l'inscription - Flux client

Flux d'inscription serveur


                    Déclencheur Lambda Avant l'inscription - Flux serveur

La demande inclut les données de validation provenant du client. Ces données proviennent des ValidationData valeurs transmises au pool d'utilisateurs SignUp et aux méthodes de AdminCreateUser l'API.

Paramètres du déclencheur Lambda avant l'inscription

La demande qu'Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des paramètres courants qu'Amazon Cognito ajoute à toutes les demandes.

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

Paramètres de demande avant l'inscription

userAttributes

Une ou plusieurs paires nom-valeur représentant des attributs utilisateur. Les noms d'attributs sont les clés.

validationData

Une ou plusieurs paires clé-valeur avec les données d'attribut utilisateur que votre application a transmises à Amazon Cognito dans la demande de création d'un utilisateur. Envoyez ces informations à votre fonction Lambda dans les ValidationData paramètres de votre demande AdminCreateUserou de votre demande d'SignUpAPI.

Amazon Cognito ne définit pas vos ValidationData données en tant qu'attributs de l'utilisateur que vous créez. ValidationData sont des informations utilisateur temporaires que vous fournissez aux fins de votre déclencheur Lambda préalable à l'inscription.

clientMetadata

Une ou plusieurs paires clé-valeur que vous pouvez fournir en tant qu'entrée personnalisée pour la fonction Lambda que vous spécifiez pour le déclencheur Avant l'inscription. Vous pouvez transmettre ces données à votre fonction Lambda en utilisant le ClientMetadata paramètre dans les actions d'API suivantes : AdminCreateUser, AdminRespondToAuthChallengeForgotPassword, et. SignUp

Paramètres de réponse avant inscription

Dans la réponse, vous pouvez définir autoConfirmUser sur true si vous voulez confirmer automatiquement l'utilisateur. Vous pouvez définir autoVerifyEmail sur true pour vérifier automatiquement l'e-mail de l'utilisateur. Vous pouvez définir autoVerifyPhone sur true pour vérifier automatiquement le numéro de téléphone de l'utilisateur.

Note

Les paramètres de réponse autoVerifyPhone, autoVerifyEmail et autoConfirmUser sont ignorés par Amazon Cognito quand l'API AdminCreateUser déclenche la fonction Lambda avant l'inscription.

autoConfirmUser

Défini sur true pour confirmer automatiquement l'utilisateur, ou sur false dans le cas contraire.

autoVerifyEmail

Affectez-lui la valeur true pour que l'adresse e-mail d'un utilisateur qui s'inscrit soit définie comme vérifiée, sinon affectez-lui la valeur false. Si autoVerifyEmail est défini sur true, l'attribut email doit comporter une valeur valide et non nulle. Dans le cas contraire, une erreur survient et l'utilisateur ne pourra pas finaliser l'inscription.

Si l'attribut email est sélectionné en tant qu'alias, un alias est créé pour l'adresse e-mail de l'utilisateur quand le paramètre autoVerifyEmail est défini. S'il existe déjà un alias avec cette adresse e-mail, l'alias est déplacé vers le nouvel utilisateur et l'adresse e-mail de l'utilisateur précédent est marquée comme non vérifiée. Pour plus d’informations, consultez Personnalisation des attributs de connexion.

autoVerifyPhone

Définir sur true pour que le numéro de téléphone d'un utilisateur qui s'inscrit soit défini comme vérifié, sinon définir sur false. Si autoVerifyPhone est défini sur true, l'attribut phone_number doit comporter une valeur valide et non nulle. Dans le cas contraire, une erreur survient et l'utilisateur ne pourra pas finaliser l'inscription.

Si l'attribut phone_number est sélectionné en tant qu'alias, un alias est créé pour le numéro de téléphone de l'utilisateur lorsque le paramètre autoVerifyPhone est défini. Si un alias existe déjà avec ce numéro de téléphone, l'alias sera déplacé vers le nouvel utilisateur et le numéro de téléphone de l'utilisateur précédent sera marqué comme non vérifié. Pour de plus amples informations, veuillez consulter Personnalisation des attributs de connexion.

Didacticiels relatifs à l'inscription

La fonction Lambda Avant l'inscription est déclenchée juste avant l'inscription d'un utilisateur. Consultez ces didacticiels d'inscription à Amazon Cognito pour JavaScript Android et iOS.

Plateforme Didacticiel
JavaScript SDK d'identité Inscrivez les utilisateurs avec JavaScript
Kit SDK d'identité pour Android Inscrivez des utilisateurs avec Android
Kit SDK d'identité pour iOS Inscrivez des utilisateurs avec iOS

Exemple d'avant inscription : confirmation automatique d'utilisateurs à partir d'un domaine enregistré

Vous pouvez utiliser le déclencheur Lambda de pré-inscription afin d'ajouter une logique personnalisée pour valider les nouveaux utilisateurs qui s'inscrivent pour votre groupe d'utilisateurs. Il s'agit d'un exemple de JavaScript programme qui montre comment inscrire un nouvel utilisateur. Il appelle un déclencheur Lambda de pré-inscription dans le cadre de l'authentification.

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

Voici un exemple de déclencheur Lambda appelé juste avant l'inscription avec le déclencheur Lambda Avant l'inscription du groupe d'utilisateurs. Il utilise un attribut personnalisé custom:domain pour confirmer automatiquement les nouveaux utilisateurs à partir d'un domaine de messagerie en particulier. Tous les nouveaux utilisateurs ne figurant pas dans le domaine personnalisé seront ajoutés au groupe d'utilisateurs, mais ne seront pas automatiquement confirmés.

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

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

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

Exemple d'avant inscription : confirmation et vérification automatiques de tous les utilisateurs

Cet exemple confirme tous les utilisateurs et définit les attributs email et phone_number sur « verified » si l'attribut est présent. De même, si l'option d'attribution d'un alias est activée, des alias sont créés pour phone_number et email lorsque la vérification automatique est définie.

Note

S'il existe déjà un alias avec ce numéro de téléphone, l'alias est déplacé vers le nouvel utilisateur et l'attribut phone_number de l'utilisateur précédent est marqué comme non vérifié. Il en va de même pour les adresses e-mail. Pour éviter cela, vous pouvez utiliser l'ListUsers API des groupes d'utilisateurs pour voir s'il existe un utilisateur existant qui utilise déjà le numéro de téléphone ou l'adresse e-mail du nouvel utilisateur comme 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 (event.request.userAttributes.hasOwnProperty("email")) { event.response.autoVerifyEmail = true; } // Set the phone number as verified if it is in the request if (event.request.userAttributes.hasOwnProperty("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

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

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

Exemple de pré-inscription : Refuser l'inscription si le nom d'utilisateur comporte moins de cinq caractères

Cet exemple vérifie la longueur du nom d'utilisateur dans une demande d'inscription. L'exemple renvoie une erreur si l'utilisateur a saisi un nom de moins de cinq caractères.

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

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

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