Javascript 如何在使用adminCreateUser命令创建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

使用创建Cognito用户之后

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