gpt4 book ai didi

javascript - 创建一个将 lambda 配置为触发器的 Cognito UserPool

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:25 27 4
gpt4 key购买 nike

我正在尝试使用 JavaScript SDK 从脚本以编程方式创建 Cognito 用户池。

我已成功创建用户池并通过在我的配置中指定相关 lambda 的 arn 定义了预注册和后确认触发器。 (根据 docs )

我的脚本是这样的:

const aws = require('aws-sdk');
const awsConfig = require('../config/config');

aws.config.update({ region: awsConfig.REGION });

const provider = new aws.CognitoIdentityServiceProvider();


// user provided args
const stage = process.argv[2];

if (!stage) {
process.stdout.write('Please provide stage as argument\n');
process.exit(1);
}


// generate arns for pre and post cognito triggers
const getArn = (lambdaName) => {
return `arn:aws:lambda:${awsConfig.REGION}:${awsConfig.AWS_ACCOUNT_ID}` +
`:function:my-project-name-${stage}-${lambdaName}`;
};

const preSignUp = getArn('preSignUp');
const postConfirmation = getArn('postConfirmation');


const userPoolConfig = {
PoolName: `mypool-${stage}`,
AutoVerifiedAttributes: ['email'],
Schema: [
{
"StringAttributeConstraints": {
"MaxLength": "2048",
"MinLength": "0"
},
"Mutable": true,
"Required": true,
"AttributeDataType": "String",
"Name": "email",
"DeveloperOnlyAttribute": false
}
],
LambdaConfig: {
PostConfirmation: postConfirmation,
PreSignUp: preSignUp
}
};


const callback = (err, resp) => {
if (err) {
process.stdout.write(`${err}\n`);
} else {
process.stdout.write(resp.UserPool.Id);
}
};


provider.createUserPool(userPoolConfig, callback);

当我运行此脚本时,它成功创建了用户池,并且当我在控制台中检查它时,触发器设置正确。

当我尝试在我的用户池中注册用户时出现错误:

AccessDeniedException { code: 'UnexpectedLambdaException', ... }

如果我进入控制台并手动设置触发器,它就可以正常工作。

此错误已被报告 - 但我没有看到任何确认信息,也没有看到解决方案:

https://github.com/aws/aws-cli/issues/2256

绝望地无法修复或找到解决方法。

最佳答案

如果您需要在 serverless.yml 文件中添加权限,那么这对我们有用。将它添加到您的资源部分:

UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
Principal: cognito-idp.amazonaws.com
FunctionName: <function-name>
SourceArn: arn:aws:cognito-idp:<your region>:<your account>:userpool/*

这使所有用户池都能够调用您的特定功能。

您可以通过查看 .serverless/serverless-state.json 获取要使用的函数名称,并在您的 lambda 中看到 FunctionName 属性。

关于javascript - 创建一个将 lambda 配置为触发器的 Cognito UserPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42934361/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com