已配置Cognito用户池,以使用户可以使用其“电子邮件地址”进行注册和登录。
如果用户使用其他人的电子邮件进行注册,则该电子邮件将停留在UNCONFIRMED状态,并且所有者将无法正确使用它。
话虽如此,让我提供以下情况的示例:
考虑考虑: *如果电子邮件已经存在但处于未确认状态,则为用户提供重新发送链接的选项。此选项不是最佳选择,因为第一步举例说明,其他数据可能已经存在于用户配置文件中。 *可以在注册前或每天作为维护过程来执行自定义lambda删除未确认的用户,但是我不确定这是否是最佳方法。
在cognito consol的 Policies 中也有此配置:“如果不使用管理员创建的用户帐户,该帐户应多快过期?”,他的名字暗示此设置仅在以下情况下适用于用户:他们是由管理员邀请的。
对于这种困境有适当的解决方案吗?
答案 0 :(得分:0)
Amazon Cognito为这些功能和自动注册提供了预注册触发器。您的想法与我根据cognito文档所实现的实现方式相同。
这里我使用的是放大/ 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检查并删除状态是否为未确认
希望这会有所帮助;)
答案 1 :(得分:0)
更改以确认未确认:
aws cognito-idp admin-confirm-sign-up \
--user-pool-id %aws_user_pools_web_client_id% \
--username %email_address%
答案 2 :(得分:0)
我通过设置ForceAliasCreation = True解决了这个问题。这将允许真正的电子邮件所有者确认其帐户。缺点是您最终有2个用户。一个CONFIRMED用户和另一个UNCONFIRMED用户。
为进行清理,我有一个lambda函数,该函数调用带有过滤器的list-users来确认用户,并删除在一定时期之前创建的帐户。此功能每天由CloudWatch触发。