通过AWS Lambda和Cognito注册用户(无服务器架构)

11

我正在使用Serverless Framework实现身份验证。我的目标是创建一个API端点,通过AWS API Gateway触发Lambda函数来创建一个新的AWS Cognito用户。该端点将有一个自定义授权器来保护它。

我的Lambda函数如下所示。当运行它时,我收到错误消息"NotAuthorizedException: SignUp is not permitted for this user pool"。您有没有想法如何授权我的Lambda函数以创建新用户?

'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@example.com"
  };
  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);
    }
  });

};
2个回答

16

"NotAuthorizedException: SignUp is not permitted for this user pool" 异常是指用户池只允许管理员通过 AdminCreateUser API 创建用户时所抛出的异常。当开启此设置后,SignUp API 将无法被调用且会抛出此错误。

若您正在使用 Lambda 触发器进行调用,则可以使用 AdminCreateUser API 或禁用此设置以允许 SignUp API 调用。


6
作为 Chean Mehta指出的,您可以禁用AdminCreateUser设置以使SignUp API工作,为此,您必须在无服务器Cognito配置中将AllowAdminCreateUserOnly设置为false,或者您可以按照以下步骤禁用它:
  1. 进入Cognito控制台。
  2. 选择您的用户池。
  3. 在常规设置下选择策略。
  4. 选择允许用户自行注册
  5. 并保存更改


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接