2

すべて!NodeJSを使用してRESTサービスからユーザーを認証するAWS Cognito SDKの使用方法

私は現在、ClaudiaJS + Claudia-API-Builderを使用して構築され、APIゲートウェイで「/ api/auth」で公開されたラムダ関数を使用して、Cognito UserPoolからユーザーを認証する際に問題に直面しています。私はcognitoUser.authenticateUserを呼び出すことに成功する方法を見つけることができないようです。

私が今までに見つけたすべてのリソースは、このAPIをブラウザ経由で呼び出すためのものですが、バックエンドでこれを行う例は見つかりませんでした。

私はすでにレスポンスを通常のコールバック、約束、およびオブジェクトリスナーとして処理しようとしましたが、それらのどれも動作していないようで、常に{"message": "Internal server error"}メッセージ私のRESTサービスからの応答として。

ノードと非同期のプログラミングについてはかなり新しいと思いますが、このコードを見直して正しい方法を教えてください。このSDKが呼び出されるように設計されている場合はフロントエンドの代わりにバックエンド?

マイ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; 

マイ認証ルート

"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); 
     }, 

    }); 

私が間違っていることを知っている人はいますか?事前に

おかげで、 エンリコ・ベルガモ

答えて

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

は、機能を含めるには、このいずれかを使用します。

関連する問題