【问题标题】:How to access Cognito Userpool from inside a lambda function?如何从 lambda 函数内部访问 Cognito 用户池?
【发布时间】:2020-09-12 19:42:30
【问题描述】:

我在我的应用程序中使用 AWS Amplify 进行身份验证。我使用电子邮件地址作为 MFA 的用户名和电话号码。但是,我还需要电话号码是唯一的,所以我创建了这个预注册 lambda 触发器:

const aws = require('aws-sdk');

exports.handler = async (event, context, callback) => {
  const cognito = new aws.CognitoIdentityServiceProvider();

  const params = {
    AttributesToGet: [],
    Filter: `phone_number = "${event.request.userAttributes.phone_number}"`,
    Limit: 1,
    UserPoolId: event.userPoolId,
  };

  try {
    const result = await cognito.listUsers(params).promise();
    if(result.Users.length === 0) {
        callback(null, event);
    } else {
        const error = new Error("Phone number has already been used.");
        callback(error, event);
    }
  } catch (err) {
      console.log(err);
  }
};

但是,该函数返回以下错误:

validatePhoneNumber-dev 无权执行:cognito-idp:ListUsers on resource:xxx

我该如何解决?

【问题讨论】:

    标签: aws-lambda amazon-cognito aws-amplify


    【解决方案1】:

    这意味着您的函数无权列出 Cognito 用户池上的用户

    在您的PreSignup-cloudformation-template.json 文件上,您需要添加所需的权限:

    在文件中,搜索lambdaexecutionpolicy,然后在其中搜索PolicyDocument。 在Statement下添加您所需的权限:

    "Statement": [
    
        ...
    
        {
            "Sid": "Cognito",
            "Effect": "Allow",
            "Action": [
                "cognito-idp:ListUsers"
            ],
            "Resource": "arn:aws:cognito-idp:us-east-1:679504623344:userpool/xxxxx"
        }
    

    将您的 Amplify 更改推送到运行 amplify push

    它现在应该可以工作了。

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 2019-03-09
      • 2017-02-17
      • 2018-11-22
      • 2019-09-21
      • 2018-12-11
      • 2016-04-08
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多