Cognito аутентифицирует весь экземпляр EC2 ... или так кажется? - PullRequest
0 голосов
/ 21 октября 2019

Кажется, что когда я вхожу в свое приложение, оно хранит учетные данные локально на сервере EC2. Я четыре раза проверил свой код и не могу понять, в чем дело. Если KEVIN выполняет вход с любого устройства, следующего пользователя, который будет входить в систему, или если кто-то обновляет свою страницу, он в конечном итоге входит в систему как KEVIN. Я включаю весь код, который потенциально может быть вовлечен в проблему. За пределами этой проблемы все мое взаимодействие с Cognito прекрасно работает;нет ошибок и нет проблем. Любая помощь будет принята с благодарностью. Я использую Node.js, Express, AWS и Websockets на своем экземпляре EC2.

// Accessed from server for route authentication before page render or redirection

const AmazonCognitoIdentity = require('amazon-cognito-identity-js');

module.exports = {
    ensureAuthenticated: function(req, res, next) {
        let data = { UserPoolId : 'us-east-1_7xUGRJPKq',
        ClientId : '6glign6b34c806osfhnik18cb3'
        };
        let userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
        let cognitoUser = userPool.getCurrentUser();
        console.log(`ensuring authentication....`);
        console.log(cognitoUser);
        if (cognitoUser === null) {
            req.flash('error_msg', 'Please log in');
            res.redirect('/login');
        } else {
            cognitoUser.getSession((err, session) => {
                if (err) {
                    console.log(err);
                } else {
                    next();
                }
            }); 
        }
    },
};

// Routes where I am seeing the problem

const express = require('express');
const router = express.Router();
const AmazonCognitoIdentity = require('amazon-cognito-identity-js');
const { ensureAuthenticated } = require('../config/auth.js');

router.get('/', (req, res) => {
    res.redirect('/dashboard');
});

router.get('/dashboard', ensureAuthenticated, (req, res) => {
    res.render('dashboard', {
        layout: './layouts/dashboard-layout.ejs'
    });
});

// Login authentication

router.post('/login', (req, res) => {
    const loginDetails = {
        Username: req.body.email,
        Password: req.body.password
    }
    const authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(loginDetails);

    const userDetails = {
        Username: req.body.email,
        Pool: userPool
    }
    const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userDetails);

    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: data => {
            cognitoUser.getUserAttributes(function(err, result) {
                if (err) {
                    console.log(err);
                    return;
                } else {
                    console.log('LOGIN RESULTS')
                    console.log(result[0].Value.toString());
                    let userId = result[0].Value.toString();
                    let userCity = result[2].Value.toString();
                    console.log(userId);
                    console.log(userCity);
                    res.redirect(`/dashboard/${userCity}/${userId}/`)
                };
            });
        },
        onFailure: err => {
            req.flash('error_msg', 'Invalid Credentials');
            console.error(err);
            res.redirect('/login');
        }
    })
});

Спасибо!

ОБНОВЛЕНИЕ 21.10.19: Удалена функция, которая не относится к проблеме.

Также сделайтеКажется, что нет JWT в локальном хранилище: Нажмите здесь для изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...