Как получить доступ к Cognito Userpool из лямбда-функции? - PullRequest
0 голосов
/ 26 мая 2020

Я использую AWS Amplify для аутентификации в моем приложении. Я использую адрес электронной почты как имя пользователя и номер телефона для MFA. Но мне также нужно, чтобы номера телефонов были уникальными, поэтому я создал этот лямбда-триггер перед регистрацией:

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 на ресурсе: xxx

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 26 мая 2020

Это означает, что ваша функция не имеет разрешения на listUsers в Cognito UserPool.

В вашем файле 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"
    }

Pu sh ваши изменения Amplify выполняются amplify push

Теперь все должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...