AWS подписывает пользователя на Cognito, используя серверную лямбду - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь заставить пользователя войти в пул пользователей Amazon Cognito с помощью AWS API Gateway / AWS Lambda в Node js.Я перепробовал много примеров из Интернета, но ни один из них не работает.Я могу нажать на 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

Регистрация работает нормально, но я не уверен, почему вход в систему делаетне работа.Спасибо!

...