如何使用AWS Cognito SDK使用NodeJS从REST服务authentication用户?

所有!

我目前面临一个问题,即使用ClaudiaJS + Claudia-API-Builder构build的lambda函数,通过“/ api / auth”暴露在API网关上,从Cognito UserPoolvalidation用户身份。 我似乎无法find调用cognitoUser.authenticateUser成功的cognitoUser.authenticateUser

到目前为止,我发现的所有资源都是通过浏览器调用这个API,但是在后台我找不到任何这样做的例子。

我已经试图处理响应作为一个常规的callback,承诺和对象监听,但没有一个似乎工作,我总是最终得到一个{“消息”:“内部服务器错误”}信息作为我的回应REST服务。

还有一点很重要,那就是我对Node和Async编程还算陌生,但是请您介绍一下这段代码并告诉我这样做的正确方法,如果这个SDK被devise为从后端调用而不是前端调用?

我的App.js

 var ApiBuilder = require('claudia-api-builder'); var api = new ApiBuilder(); //Routes var usuario = require('./routes/usuario'); var auth = require('./routes/auth'); //Caminho default da API var API_ROOT = "simc/api"; //User Routes api.get(API_ROOT + "/f1", usuario.f1); api.get(API_ROOT + "/f2", usuario.f2); //Auth Routes api.get(API_ROOT + "/login", auth.login); module.exports = api; 

我的validation路线

 "use strict" var AWS = require('aws-sdk'); var AWSCognito = require('amazon-cognito-identity-js'); var authAPI = {}; authAPI.login = function() { var authenticationData = { Username: 'xxxxxx', Password: 'xxxxxx', }; var authenticationDetails = new AWSCognito.AuthenticationDetails(authenticationData); var poolData = { UserPoolId: 'us-east-1_xxxxxx', ClientId: 'xxxxxx' }; var userPool = new AWSCognito.CognitoUserPool(poolData); var userData = { Username: 'xxxxxx', Pool: userPool }; //Trying to use Promises var cognitoUser = new AWSCognito.CognitoUser(userData); return cognitoUser.authenticateUser(authenticationDetails) .then(function(result) { console.log('access token + ' + result.getAccessToken().getJwtToken()); //Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer console.log('idToken + ' + result.idToken.jwtToken); return result; }) .catch(function(err) { console.log(err); return err; }); //Trying to use Object Listeners var request = cognitoUser.authenticateUser(authenticationDetails).promise(); return request.on('success', function(response) { console.log('access token + ' + response.getAccessToken().getJwtToken()); //Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer console.log('idToken + ' + response.idToken.jwtToken); return response; }). on('failure', function(err) { console.log("Error!"); return err; }).send(); }; module.exports = authAPI; 

我已经修改了原始处理程序,因为它似乎也不能正常工作。

 cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { console.log('access token + ' + result.getAccessToken().getJwtToken()); /*Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer*/ console.log('idToken + ' + result.idToken.jwtToken); return 'idToken + ' + result.idToken.jwtToken; }, onFailure: function(err) { return err;//alert(err); }, }); 

有谁知道我做错了什么?

在此先感谢,恩里科贝加莫

 var authenticationDetails = new AWS.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); 

使用这个包含该function。