是否可以使用AWS用户池同步触发器?

时间:2017-01-06 13:36:46

标签: amazon-web-services lambda triggers amazon-cognito aws-sdk-nodejs

问题

当有人通过在dynamodb表中创建条目的联合身份进行注册时,我触发了lambda函数。

当用户通过关联的用户池注册(我正在考虑发布确认)时,我希望发生相同的功能(或类似功能)。

背景(我尝试过的)

我已将联合身份链接到用户池,但是不会为用户池调用链接到Cognito触发器的lambda。我认为它可能不支持相同的过程(是这种情况吗?)并尝试将自定义的工作流触发器添加到用户池以进行后确认。我只是收到一个错误(错误的请求400),说明' {" __ type":" NotAuthorizedException"," message":"用户不能确认"}'虽然用户在Cognito中显示已确认。

我查看了文档,但我没有看到很多明显的例子。我找到的最好的是一封邮件确认邮件,我修改后包含一个基本的发电机调用如下:

var doc = require('dynamodb-doc');

exports.handler = function(event, context) {
    console.log(event);

    if (event.request.userAttributes.email) {
            var db = new doc.DynamoDB();
            var tableName = 'Users'
            var user = {
                'id' : event.identityId,
                'name' : event.datasetRecords.name.newValue,
                'email' : event.datasetRecords.email.newValue,
            };

            var params = {
                'TableName' : tableName,
                'Item' : user
            };

            console.log('Inserting user', params);

            db.putItem(params, function(err, data) {
                console.log(err, data);

                if (err) {
                    console.log('User insert failure', err);
                    context.done(err);
                } else {
                    console.log('User insert success', data);
                    context.done(null, event);
                }
            });
    } else {
        // Nothing to do, the user's email ID is unknown
        context.done(null, event);
    }
};

我看过类似的问题,最近我发现了这个问题 previous question 虽然它不包含工作代码段。我尝试了一些变化,但没有运气!

如上所述,我还看到其他示例中使用了回调,因此最好清楚首选和工作代码应该是什么样的!

我还想知道它是否应该以特定格式返回context.done中的数据,因为我看到了一些set responses,如下所示:

"response": {
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

在已确认的用户上调用ConfirmSignUp会引发错误“用户无法确认”。由于该post确认lambda函数未被调用。虽然这个错误可能更具描述性。

您是否已经从文档中查看过此示例? http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html#aws-lambda-triggers-post-confirmation-example