Aws Cognito的Lambda PreSignup触发器会错误地为用户自动确认和自动验证电子邮件

时间:2019-05-05 17:16:56

标签: amazon-web-services amazon-cognito

我创建了一个Lambda函数,该函数在AWS Cognito的PreSignUp阶段中触发,该函数在允许用户进行注册之前检查注册电子邮件是否以某个域结尾。我正在使用amazon-cognito-identity-js v3.0.11进行注册和身份验证请求。

我之前已经注册并确认了用户。但是我还从用户池中删除了该用户。当我尝试使用相同的电子邮件地址进行注册时,用户电子邮件已被标记为已确认,而无需用户甚至单击链接来验证电子邮件。用户注册后,还会进行其他客户端呼叫。还返回了一个JWT令牌,该令牌的email_verified设置为true。如何防止自动验证电子邮件地址?还是一旦确认了用户的电子邮件,即使从用户池中删除了用户的电子邮件,它仍将保持确认状态?

预注册Lambda功能

exports.handler = async (event) => {
    console.log('Incoming Event: ', JSON.stringify(event));
    if (
        event.region === 'us-east-1'
        && event.userPoolId === 'us-east-1_xxxxxxxxx'
        && event.callerContext
        && event.callerContext.clientId === 'xxxxyyyyzzzz'
        && event.request
        && event.request.userAttributes
        && event.request.userAttributes.email
        && event.request.userAttributes.email.endsWith('@example.com')) {
            return event;
        } else {
            throw new Error("Invalid Request");
        }
};

预注册事件

{
    "version": "1",
    "region": "us-east-1",
    "userPoolId": "us-east-1_xxxxxxxxx",
    "userName": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "xxxxyyyyzzzz"
    },
    "triggerSource": "PreSignUp_SignUp",
    "request": {
        "userAttributes": {
            "email": "xxxxxxx@example.com"
        },
        "validationData": {}
    },
    "response": {
        "autoConfirmUser": false,
        "autoVerifyEmail": false,
        "autoVerifyPhone": false
    }
}

1 个答案:

答案 0 :(得分:0)

在以下情况下,将已经确认用户的电子邮件。

  • 用户先前已确认其电子邮件地址。
  • 用户已从UserPool中删除。
  • 用户再次注册。

每个UserPool可能仅确认一次电子邮件。