通过确认后 lambda 函数将 Cognito 用户信息写入 DynamoDB?

KSa*_*mra 3 amazon-web-services amazon-dynamodb amazon-cognito aws-lambda

我在实现确认后 lambda 函数时遇到问题,在该函数中我从注册过程中获取用户提交的凭据并将其写入“用户”DynamoDB 表。我试图写入表格的具体条目是 - 用户名 - 电子邮件 - 实际姓名

为了区分用户,我需要将主键作为“sub”值,因为用户可以更改他们的用户名,这可能会在将来导致问题。

我遇到的主要困惑点如下

1) 我应该以什么角色开始我的 Lambda 函数?

创建 lambda 函数时,我需要给它一个起始角色,但我不确定我应该使用什么起始模板。我知道我将需要 DynamoDB 写访问权限,但我没有看到相应的模板。

2) 如何访问 Cognito 用户的各个字段?

据我所知,这些值应该存储在处理程序函数的“事件”参数中,但我找不到任何文档或示例事件来说明如何访问诸如“sub”、“电子邮件”等。

F_S*_*O_K 6

1) 你的 Lambda 角色

  • 创建您的 Lambda 函数,而不是使用模板,选择创建一个新角色并为其命名(比如 MyLambdaRole)。
  • 进入 IAM,转到角色菜单选项并找到 MyLambdaRole 角色。附加以下策略:AmazonDynamoDBFullAccess

请注意,默认情况下,Lambda 已经具有 CloudWatch 访问权限。AmazonDynamoDBFullAccess 拥有比您严格需要的更多权限,但并非不合理。如果您确实想要更细粒度的权限,我至少会让它与 AmazonDynamoDBFullAccess 一起使用并从那里开始。另请注意,您根本不需要任何 Cognito 权限,因为您要做的就是解析 Cognito 发送给您的数据。

确保在脚本中导入相关的 DynamoDB 库。

例如:

exports.handler = (event, context, callback) => {

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});

// Create the DynamoDB service object
ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});

};
Run Code Online (Sandbox Code Playgroud)

2) 访问个人 Cognito 用户数据

假设您使用的是 NodeJs,如下所示:

event.request.userAttributes.email
Run Code Online (Sandbox Code Playgroud)

更多细节在这里

最后一件事,您不需要为 Lambda 函数分配触发器。您需要做的就是进入 Cognito,并在触发器部分分配 Lambda 函数。这样 Cognito 会直接调用 Lambda - Lambda 不需要监听任何特殊事件。