Déclencheur Lambda Avant l'inscription - Amazon Cognito

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 valeurs ValidationData transmises aux méthodes d'API SignUp et AdminCreateUser du groupe d'utilisateurs.

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

Il s'agit des paramètres qu'Amazon Cognito transmet à cette fonction Lambda avec les informations d'événements figurant dans les paramètres communs.

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 nom-valeur contenant les données de validation dans la demande d'enregistrement d'un utilisateur. Les données de validation sont définies, puis transmises depuis le client dans la demande d'enregistrement d'un utilisateur. Vous pouvez transmettre ces données à votre fonction Lambda à l'aide du paramètre ClientMetadata dans les actions d'API InitiateAuth et AdminInitiateAuth.

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 à l'aide du paramètre ClientMetadata dans les actions d'API suivantes : AdminCreateUser, AdminRespondToAuthChallenge, ForgotPassword 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 Alias.

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 Alias.

Didacticiels relatifs à l'inscription

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

Plateforme Didacticiel
Kit SDK d'identité pour JavaScript Inscrivez des 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 programme JavaScript 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 que cela ne se produise, vous pouvez utiliser l'API ListUsers de groupes d'utilisateurs pour voir si un utilisateur emploie déjà comme alias le nouveau numéro de téléphone ou la nouvelle adresse e-mail de l'utilisateur.

Node.js
exports.handler = (event, context, callback) => { // 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 to Amazon Cognito callback(null, event); };
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": {} }