Javascript 如何在使用adminCreateUser命令创建Cognito用户后确认该用户
使用创建Cognito用户之后Javascript 如何在使用adminCreateUser命令创建Cognito用户后确认该用户,javascript,node.js,typescript,amazon-web-services,amazon-cognito,Javascript,Node.js,Typescript,Amazon Web Services,Amazon Cognito,使用创建Cognito用户之后 let AWS = require("aws-sdk"); AWS.config.update({ region: "us-east-1" }); 命令的输出如下所示 { User: { Username: 'e9c137e4-6482-4bf5-9fb9-03f764dd0b4b', Attributes: [ [Object], [Object], [Object] ], UserCre
let AWS = require("aws-sdk");
AWS.config.update({
region: "us-east-1"
});
命令的输出如下所示
{
User: {
Username: 'e9c137e4-6482-4bf5-9fb9-03f764dd0b4b',
Attributes: [ [Object], [Object], [Object] ],
UserCreateDate: 2021-04-27T14:17:43.856Z,
UserLastModifiedDate: 2021-04-27T14:17:43.856Z,
Enabled: true,
UserStatus: 'FORCE_CHANGE_PASSWORD'
}
}
从该输出中,我获取Username
值,然后使用adminConfirmSignUp
命令确认用户:
var params = {
UserPoolId: USER_POOL_ID,
Username: 'e9c137e4-6482-4bf5-9fb9-03f764dd0b4b',
ClientMetadata: {
'STRING_KEY_1': 'STRING_VALUE_1',
'STRING_KEY_2': 'STRING_VALUE_2'
}
};
cognitoidentityserviceprovider.adminConfirmSignUp(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
但我得到了一个错误:
NotAuthorizedException: User cannot be confirmed. Current status is FORCE_CHANGE_PASSWORD
后来我发现,我可以使用adminSetUserPassword
命令来更改用户密码。它碰巧也确认了用户,工作正常,只是它不会触发我需要触发的确认后lambda
var params = {
Password: 'New-password',
UserPoolId: USER_POOL_ID,
Username: 'e9c137e4-6482-4bf5-9fb9-03f764dd0b4b',
Permanent: true
};
cognitoidentityserviceprovider.adminSetUserPassword(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
如何确认使用
adminCreateUser
命令创建的用户。我不想使用adminSetUserPassword
来确认它。我宁愿使用adminConfirmSignUp
命令来确认用户并触发确认后lambda。请告知。这是已知的问题
找到了一个解决办法
可能适合您的用例,具体取决于您期望的行为。在身份验证后处理程序中执行检查,并在那里以及在确认后处理程序中执行确认后逻辑
def处理程序(事件):
''处理身份验证后事件''
状态=事件['request']['userAttributes']['cognito:user_status']
#如果状态尚未确认,我们可以假设现在是
如果状态==“强制更改密码”:
#做点什么
返回事件
AdminConfirmSignUp
仍然不会调用确认后处理程序,因此不要浪费时间让它正常工作。如果您想执行一些逻辑作为用户配置步骤的一部分,只需自己调用处理程序,不要指望cognito有意义。什么叫“已验证”?Cognito在电子邮件和电话号码上有一个已验证的状态,但我不相信用户上有这样的状态。将“email\u verified”UserAttribute设置为“true”应该已经将电子邮件设置为“verified”。我不是说“verified”。但我的意思是“确认”。这封邮件确实是可以验证的。但是当用户输入从Cognito收到的四位数确认号码以确认其身份后,用户被“确认”。您是否确认在他们设置新密码时未触发您的确认后lambda?我再次检查了它,确认后lambda不会在adminSetUserPassword
上触发,即使用户将在Cognito用户池中标记为已确认。
var params = {
Password: 'New-password',
UserPoolId: USER_POOL_ID,
Username: 'e9c137e4-6482-4bf5-9fb9-03f764dd0b4b',
Permanent: true
};
cognitoidentityserviceprovider.adminSetUserPassword(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});