AWS使用无服务器lambda登录用户以进行认知

时间:2019-03-31 01:54:31

标签: node.js amazon-web-services aws-lambda amazon-cognito serverless

我正在尝试让用户使用Node js中的AWS API Gateway / AWS Lambda登录到Amazon Cognito用户池。我在网上尝试了很多示例,但似乎都没有用。我可以点击URL并进入控制台日志,其中显示“ start 1”,但除此之外没有其他内容。我不确定我在做什么错。这是我的代码:

'use strict';
const middy = require('middy');
const { cors } = require('middy/middlewares');
const config = require('../config');
const AWS = require('aws-sdk');
const AmazonCognitoIdentity = require('amazon-cognito-identity-js');
const CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
var AuthenticationDetails = AmazonCognitoIdentity.AuthenticationDetails;
var CognitoUser = AmazonCognitoIdentity.CognitoUser;

const bodyParser = require("body-parser");

const request = require('request');
const jwkToPem = require('jwk-to-pem');
const jwt = require('jsonwebtoken');
global.fetch = require('node-fetch');


var poolData = config.poolData;
var userPool =
  new AmazonCognitoIdentity.CognitoUserPool(poolData);

const login = async (event, context) => {
  var body = JSON.parse(event.body);
  var email = body.userName;
  var password = body.password;

  console.log(body);

  var authenticationData = {
    Username: email,
    Password: password,
  };
  var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
  var userData = {
    Username: email,
    Pool: userPool
  };
  console.log('start 0');
  var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
  console.log("start 1");
  console.log(cognitoUser);

  try {
  cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess: (result) => {
        var accessToken = result.getAccessToken().getJwtToken();
        console.log(result);
        console.log(accessToken);
        var idToken = result.idToken.jwtToken;
        console.log(idToken);
      },

      onFailure: (err) => {
        console.log(err);
        idToken = err;
        return;
      },
    });
  }
  catch(error) {
    console.error(error);
  }
};

const signin = middy(login)
  .use(cors()) // Adds CORS headers to responses

module.exports = { signin }

...并且我的无服务器yml文件如下:

service: resto # NOTE: update this with your service name

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: ap-southeast-2

functions:
  signup:
    handler: api/signup.auth
    memorySize: 128
    description: auth service
    events:
      - http: 
          path: api
          method: post
          cors: true
  signin:
    handler: api/signin.signin
    memorySize: 128
    description: signin service
    events:
      - http: 
          path: signin
          method: post
          cors: true
plugins:
  - serverless-offline

注册可以正常运行,但是我不确定为什么登录不起作用。谢谢!

0 个答案:

没有答案