Amazon web services Cognoto通过AWS lambda函数授权用户
我使用AWS Cognito,需要通过lambda函数授权用户。我在网上看到过一些例子,当我尝试应用它们时,Cognito身份验证不会运行,并且会以某种方式被跳过:Amazon web services Cognoto通过AWS lambda函数授权用户,amazon-web-services,aws-lambda,authorization,amazon-cognito,Amazon Web Services,Aws Lambda,Authorization,Amazon Cognito,我使用AWS Cognito,需要通过lambda函数授权用户。我在网上看到过一些例子,当我尝试应用它们时,Cognito身份验证不会运行,并且会以某种方式被跳过: const AWS = require('aws-sdk'); const AmazonCognitoIdentity = require('amazon-cognito-identity-js'); global.fetch = require("node-fetch"); const CognitoUserP
const AWS = require('aws-sdk');
const AmazonCognitoIdentity = require('amazon-cognito-identity-js');
global.fetch = require("node-fetch");
const CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var AuthenticationDetails = AmazonCognitoIdentity.AuthenticationDetails;
var CognitoUser = AmazonCognitoIdentity.CognitoUser;
var USER_POOL_ID = 'my_pool_id';
var CLIENT_ID = 'my_client_id';
var idToken = '';
exports.handler = async (event, callback) => {
var email = event['username'];
var password = event['password'];
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails({
Username: email,
Password: password
});
const poolData = {
UserPoolId: USER_POOL_ID,
ClientId: CLIENT_ID
};
const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username: email,
Pool: userPool
}
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
var accessToken = result.getAccessToken().getJwtToken();
console.log(result);
console.log(accessToken);
idToken = result.idToken.jwtToken;
console.log(idToken);
callback(null, accessToken);
},
onFailure: (err) => {
console.log(err);
idToken = err;
callback(err);
},
});
console.log("cognitoUser after: ", cognitoUser);
};
我可以看到日志中打印的最后一个console.log,但lambda似乎没有等待
cognitoUser.authenticateUser
的请求解析,因为在成功或失败时没有打印任何console.log。这里有两个选项
exports.handler=async(事件,回调)
中删除async
authenticateUser
包装为Promise
并使用wait
const res = await new Promise((resolve, reject) => {
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
var accessToken = result.getAccessToken().getJwtToken();
console.log(result);
console.log(accessToken);
idToken = result.idToken.jwtToken;
console.log(idToken);
resolve(accessToken);
},
onFailure: (err) => {
console.log(err);
idToken = err;
reject(err);
},
});
}