我正在使用无服务器框架进行身份验证。我的目标是创建一个API端点,用于触发(通过AWS API Gateway)Lambda函数,该函数可创建新的AWS Cognito用户。端点将有一个自定义授权器来保护它。
我的Lambda功能如下。当它运行时,我收到错误“NotAuthorizedException:此用户池不允许SignUp”。有关如何授权我的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);
}
});
};
答案 0 :(得分:5)
" NotAuthorizedException:此用户池不允许使用SignUp"当用户池仅允许管理员通过AdminCreateUser API创建用户时,抛出异常。启用此设置后,无法调用SignUp API并将抛出此错误。
如果您从lambda触发器调用此方法,则可以使用AdminCreateUser API或禁用此设置,以便您的用户池允许SignUp API调用。
答案 1 :(得分:1)
正如Chean Mehta所指出的,您可以禁用SignCreate API的AdminCreateUser设置才能工作,因为您必须在无服务器的认知配置中将AllowAdminCreateUserOnly
设置为false
,或者您可以禁用请按照以下步骤操作: