Cognito无法注册已经具有未确认状态的用户



配置了Cognito用户池,供用户使用其"电子邮件地址"进行注册和登录。

如果用户使用其他人的电子邮件注册,则该电子邮件将被困在UNCONFIREMED状态,所有者将无法正确使用它。

话虽如此,让我提供一个具有以下场景的示例:

  1. 用户使用用户不拥有的电子邮件地址登录,假设它是someone@mail.com。在这个步骤(注册表(中,会发送更多的数据,如组织名称和用户全名
  2. 验证码发送到电子邮件
  3. 现在拥有的用户someone@email.com想要创建一个帐户(也许在未来的几天(,所以他去填写了注册表,但cognito{"__type":"UsernameExistsException","message":"An account with the given email already exists."}抛出了一个错误

考虑:*如果电子邮件已经存在,但处于未确认状态,则为用户提供重新发送链接的选项。此选项不是最佳选项,因为如第一步所示,用户配置文件中可能已经存在其他数据。*自定义lambda可以在注册前删除未经确认的用户,也可以作为每天的维护过程,但我不确定这是否是最好的方法。

在cognito consol的策略下也有这样的配置:"如果不使用,管理员创建的用户帐户应该多快过期?",但顾名思义,此设置仅适用于管理员邀请的用户。

对于这种困境有合适的解决方案吗?

Amazon Cognito为这些功能提供了预注册触发器,还提供了自动注册。你的想法和我根据cognito文件实现的方式是一样的。

在这里,我使用的是amplify/cli,这是我开发目的的工具链,因此触发器中使用的lambda函数如下:

`

"use strict";
console.log("Loading function");
var AWS = require("aws-sdk"),
uuid = require("uuid");
var cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();
exports.handler = (event, context, callback) => {
const modifiedEvent = event;
// check that we're acting on the right trigger
if (event.triggerSource === "PreSignUp_SignUp") {
var params = {
UserPoolId: event.userPoolId,
Username: event.userName
};
cognitoIdentityServiceProvider.adminGetUser(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} // an error occurred
else {
console.log("cognito service", data);
if (data.UserStatus == "UNCONFIRMED") {
cognitoIdentityServiceProvider.adminDeleteUser(params, function(
err,
data
) {
if (err) console.log(err, err.stack);
// an error occurred
else console.log("Unconfirmed user delete successful ");
// successful response
});
}
// successful response
}
});
return;
}
// Throw an error if invoked from the wrong trigger
callback('Misconfigured Cognito Trigger '+ event.triggerSource);
};

`

如果使用aws-sdk方法adminGetUser和adminDeleteUser 状态为UNCONFIRMED,这将实际检查并删除

希望这会有所帮助;(

我通过设置ForceAlisCreation=True解决了这个问题。这将允许真正的电子邮件所有者确认他们的帐户。结果是,您最终有两个用户。一个已确认用户和另一个未确认用户。

为了解决这个问题,我有一个lambda函数,它调用带有未确认用户过滤器的列表用户,并删除在某个时期之前创建的帐户。此功能由CloudWatch每天触发。

从取消配置更改为确认:

aws cognito-idp admin-confirm-sign-up 
--user-pool-id %aws_user_pools_web_client_id% 
--username %email_address%

最新更新