Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Cognoto通过AWS lambda函数授权用户_Amazon Web Services_Aws Lambda_Authorization_Amazon Cognito - Fatal编程技术网

Amazon web services Cognoto通过AWS lambda函数授权用户

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

我使用AWS Cognito,需要通过lambda函数授权用户。我在网上看到过一些例子,当我尝试应用它们时,Cognito身份验证不会运行,并且会以某种方式被跳过:

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);
             },
         });
     }
    
  • 注意:代码尚未测试