【问题标题】:AWS Lambda function doesn't trigger from Cognito PostConfirmation event, but it works in TestAWS Lambda 函数不会从 Cognito PostConfirmation 事件触发,但它在测试中有效
【发布时间】:2020-09-13 14:37:56
【问题描述】:

我创建了一个允许用户注册的应用程序,它将他们添加到我的 AWS Cognito 用户池中。这是使用 AWS-SDK for PHP 完成的,特别是 signUp 方法。我尝试创建一个 Lambda 函数,该函数在 PostConfirmation 时触发,将用户详细信息添加到我的 DynamoDB 表中,当我使用测试功能时它可以工作,但是当我将其设置为实时部署时,它不会将用户添加到表中并且不会给我任何错误。

这是我的方法的参数:

$this->client->signUp([
                'ClientId' => $this->client_id,
                'Username' => $username,
                'Password' => $password,
                'UserAttributes' => [
                    [
                        'Name' => 'name',
                        'Value' => $name
                    ],
                    [
                        'Name' => 'email',
                        'Value' => $email
                    ],
                ]
            ]);

这是我的 Lambda 函数:

var aws = require('aws-sdk');
const ddb = new aws.DynamoDB({apiVersion: '2012-10-08'});

aws.config.update({region: 'us-east-1'});

exports.handler = function(event, context, callback) {
    var params = {
            TableName: 'RecipeUsersDB',
            Item: {
                'username': {S: event.request.userName},
                'name': {S: event.request.userAttributes.name},
                'email': {S: event.request.userAttributes.email}
                }
        }
    ddb.putItem(params, function(err, data) {
      if (err) {
        console.log("Error", err);
      } else {
        console.log("Exit", data);
      }
    });
    callback(null);
};

这是有效的测试事件参数:

{
  "request": {
    "userName": "hrefrlo",
    "userAttributes": {
      "sub": "e1feer",
      "name": "2srhserrh",
      "email": "3srwergthgsrg"
    }
  },
  "response": {}
}

我为函数赋予了几种不同的权限策略:


AmazonDynamoDBFullAccess

AmazonCognitoDeveloperAuthenticatedIdentities

AmazonCognitoPowerUser

AWSLambdaBasicExecutionRole

AWSLambdaInvocation-DynamoDB


这只是一个单一的分配,所以应用程序(网站)只是用于演示,并且只会部署在 Beanstalk 上。感谢您的帮助,谢谢!

【问题讨论】:

  • 这很明显,但问题中没有明确提及...您是否已经确认用户注册?
  • 是的,对不起,我应该提到这一点。我有一种方法可以使用发送到他们电子邮件的确认码来确认用户。

标签: node.js aws-lambda amazon-dynamodb amazon-cognito


【解决方案1】:

我意识到我的愚蠢错误。 Cognito 的 PostConfirmation 响应其实是这样的:

{
    "version": "1",
    "region": "eu-central-1",
    "userPoolId": "eu-central-1_45YtlkflA",
    "userName": "user4",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-java-console",
        "clientId": "4736lckau64in48dku3rta0eqa"
    },
    "triggerSource": "PostConfirmation_ConfirmSignUp",
    "request": {
        "userAttributes": {
            "sub": "a2c21839-f9fc-49e3-be9a-16f5823d6705",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "email": "asdfsdfsgdfg@carbtc.net"
        }
    },
    "response": {}
}

在我的代码中,我有 event.request.userName,它应该是 event.userName。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2020-12-28
    • 2018-03-11
    • 2018-05-05
    • 2020-01-14
    • 2019-06-12
    相关资源
    最近更新 更多