Регистрация пользователя через AWS Lambda и Cognito (бессерверная архитектура)

Я использую Serverless Framework в своем подходе к аутентификации. Моя цель - создать конечную точку API, которая запускает (через AWS API Gateway) лямбда-функцию, которая создает нового пользователя AWS Cognito. Конечная точка будет иметь настраиваемый авторизатор для ее защиты.

Моя лямбда-функция ниже. При запуске я получаю сообщение об ошибке «NotAuthorizedException: SignUp не разрешен для этого пула пользователей». Есть мысли о том, как авторизовать мою лямбда-функцию для создания нового пользователя?

'use strict';

var AmazonCognitoIdentity = require('amazon-cognito-identity-js');
var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var CognitoUserAttribute = AmazonCognitoIdentity.CognitoUserAttribute;

module.exports.init = (event, context, callback) => {

  console.log('Lambda initiated with event:',event);

  // Define AWS Cognito User Pool
  var poolData = {
    "UserPoolId": process.env['COGNITO_USER_POOL_ID'],
    "ClientId": process.env['COGNITO_APP_CLIENT_ID']
  };
  var userPool = new CognitoUserPool(poolData);
  console.log('userPool:',userPool);

  // Define User Attributes
  var attributeList = [];
  var dataEmail = {
    "Name": "email",
    "Value": "[email protected]"
  };
  var attributeEmail = new CognitoUserAttribute(dataEmail);
  attributeList.push(attributeEmail);
  console.log('attributeList:',attributeList);

  // Create User via AWS Cognito
  userPool.signUp('username', 'password', attributeList, null, function(err, result) {
    if(err) {
      console.log('err:',err);
      callback(err,null);
    } else {
      console.log('result:',result);
      cognitoUser = result.user;
      console.log('user name is ' + cognitoUser.getUsername());
      callback(null,result);
    }
  });

};

person Jesse    schedule 09.06.2017    source источник


Ответы (2)


Исключение «NotAuthorizedException: SignUp не разрешено для этого пула пользователей» генерируется, когда пул пользователей позволяет администраторам создавать пользователей только через API AdminCreateUser. Если этот параметр включен, SignUp API не может быть вызван и вызовет эту ошибку.

Если вы вызываете это из лямбда-триггера, вы можете использовать AdminCreateUser API или отключить этот параметр, чтобы ваш пул пользователей разрешал вызовы SignUp API.

person Chetan Mehta    schedule 09.06.2017

Как отметил Чин Мета, вы можете отключить параметр AdminCreateUser для работы SignUp API, для этого вам необходимо установить От AllowAdminCreateUserOnly до false в конфигурации бессерверного когнито или вы можете отключить это, выполнив следующие действия:

  1. Перейдите в консоль когнито.
  2. Выберите свой пул пользователей.
  3. Выберите «Политики» в разделе «Общие настройки».
  4. Выберите Разрешить пользователям регистрироваться.
  5. и сохранить изменения
person Jishnu    schedule 13.12.2019