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

时间:2018-11-26 22:15:21

标签: amazon-cognito

已配置Cognito用户池,以使用户可以使用其“电子邮件地址”进行注册和登录。

如果用户使用其他人的电子邮件进行注册,则该电子邮件将停留在UNCONFIRMED状态,并且所有者将无法正确使用它。

话虽如此,让我提供以下情况的示例:

  1. 用户使用该用户不拥有的电子邮件地址登录,假设它是 someone@mail.com 。在此步骤(注册表单)中,将发送更多数据,例如组织名称和用户全名。
  2. 验证码已发送到电子邮件
  3. 现在拥有 someone@email.com 的用户想要创建一个帐户(可能是将来的几天),因此他去填写注册表,但是cognito抛出了错误{ {1}}

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

  

在cognito consol的 Policies 中也有此配置:“如果不使用管理员创建的用户帐户,该帐户应多快过期?”,他的名字暗示此设置仅在以下情况下适用于用户:他们是由管理员邀请的。

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

3 个答案:

答案 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触发。