Comment dois-je procéder pour vérifier par e-mail un utilisateur qui est CONFIRMÉ mais que email_verified est faux?
Le scénario est à peu près un agent inscrit l'utilisateur en son nom, et je confirme l'utilisateur via l'appel admin adminConfirmSignUp. À ce stade, l'utilisateur ne peut pas modifier son mot de passe car l'indicateur email_verified est faux.
Je ne peux pas appeler resendConfirmationCode car l'utilisateur est déjà confirmé.
Je ne peux pas appeler ForgotPassword car l'indicateur email_verified est faux.
Le mieux que je puisse penser est de supprimer le compte utilisateur et d'appeler signUp (les invitant à ressaisir leur mot de passe ou un nouveau mot de passe), recréant ainsi leur compte.
Actuellement, Cognito ne permet pas à un agent externe de mettre à jour les attributs email_verified et phone_verified au nom de l'utilisateur. La seule façon de les marquer comme vraies est par le biais d'un processus de vérification de code qui peut être effectué par l'utilisateur final. L'exception à cela concerne les API de niveau administrateur, comme le décrivent les réponses ci-dessous, mais celles-ci ne doivent pas être effectuées du côté client.
Le processus est le suivant: l'utilisateur se connecte et obtient un jeton d'accès. Ils appellent ensuite GetUserAttrbuteVerificationCode API avec l'attribut qu'ils veulent vérifier. Cela fournira un code à l'utilisateur, qui peut être utilisé en appelant VerifyUserAttribute qui retournera l'attribut comme vérifié.
À l'aide de l'AWS CLI, vous pouvez mettre à jour l'attribut email_verified:
aws cognito-idp admin-update-user-attributes
--user-pool-id eu-west-xxxxxx
--username [email protected]
--user-attributes Name=email_verified,Value=true
Vous pouvez changer email_verified
, phone_number_verified
et d'autres attributs en appelant adminUpdateUserAttributes
sans lambdas et déclencheurs:
'use strict'
var AWS = require('aws-sdk')
AWS.config.update({
accessKeyId: 'YOUR_ACCESS_KEY_HERE',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY_HERE',
region: 'us-east-1' // change region if required
});
var CognitoIdentityServiceProvider = AWS.CognitoIdentityServiceProvider
var client = new CognitoIdentityServiceProvider({
apiVersion: '2016-04-19',
region: 'us-east-1' // change region if required
})
client.adminUpdateUserAttributes({
UserAttributes: [{
Name: 'phone_number_verified',
Value: 'true'
}, {
Name: 'email_verified',
Value: 'true'
}
// other user attributes like phone_number or email themselves, etc
],
UserPoolId: 'COGNITO_USER_POOL_ID_HERE',
Username: 'USERNAME'
}, function(err) {
if (err) {
console.log(err, err.stack)
} else {
console.log('Success!')
}
})
Vous pouvez maintenant définir par programme email_verified
à true en utilisant le déclencheur lambda de préinscription et en modifiant l'événement renvoyé avec event.response.autoVerifyEmail = true;
Ce n'est pas encore dans la documentation mais référencé sur ce problème github . Lisez aussi travailler avec les déclencheurs cognito lambda .
Voici une autre approche que vous pouvez utiliser pour créer des utilisateurs par agents. Vous pouvez utiliser AdminCreateUser au nom de l'utilisateur. En appelant cette API, l'utilisateur sera créé avec un mot de passe temporaire qui sera envoyé à l'adresse e-mail de l'utilisateur. (c'est-à-dire que l'utilisateur sera dans l'état Force_Change_Password). Utilisez maintenant l'API RespondToAuthChallenge pour modifier le mot de passe.
Remarque: Vous devez définir l'attribut "email_verified" dans la liste d'attributs. pour vous assurer que l'e-mail de l'utilisateur sera vérifié.
Voici l'exemple de code dans NodeJS:
var params = {
UserPoolId: process.env.userPoolId, /* required */
Username: email,//'STRING_VALUE', /* required */
DesiredDeliveryMediums: [
"EMAIL",
/* more items */
],
ForceAliasCreation: false,
UserAttributes: [{
Name: 'email_verified',
Value: 'True'
},/* any other Attributes*/],
};
cognitoidentityserviceprovider.adminCreateUser(params, function (err, data) {
if (err) {
console.log(err, err.stack);
reject(err); // an error occurred
}
else {
console.log(data);
resolve(data);
}// successful response
});
});
Déclenchement sur pré-enregistrement cette fonction lambda (Node.js v6):
exports.handler = function(event, context) {
event.response.autoConfirmUser = true;
event.response.autoVerifyEmail = true;
event.response.autoVerifyPhone = true;
context.done(null, event);
};
En utilisant "Configurer l'événement de test", vous pouvez le tester d'abord avec cette charge utile
{
"version": 1,
"triggerSource": "PreSignUp_SignUp",
"region": "<region>",
"userPoolId": "<userPoolId>",
"userName": "<userName>",
"callerContext": {
"awsSdk": "<calling aws sdk with version>",
"clientId": "<apps client id>"
},
"request": {
"userAttributes": {
"email": "[email protected]"
},
"validationData": {
"k1": "v1",
"k2": "v2"
}
},
"response": {
"autoConfirmUser": false,
"autoVerifyEmail": false,
"autoVerifyPhone": false
}
}
Désormais, lorsque vous créez l'utilisateur à partir de l'API, ces indicateurs de vérification doivent être true
.
vérifier l'email de l'utilisateur sur aws cognito avec python
response = client.get_user_attribute_verification_code (AccessToken = 'eyJraWQiOiJtTEM4Vm ......', AttributeName = 'email')
response = client.verify_user_attribute (AccessToken = 'eyJraWQiOiJtTEM ......', AttributeName = 'email', Code = '230433')