【发布时间】: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