Файлы cookie сеанса на Express.JS

#javascript #node.js #express #cookies

#javascript #node.js #выразить #файлы cookie

Вопрос:

все!

Я использую Express-Session для управления своим сеансом на стороне сервера, поэтому, когда я получаю пользовательские данные и устанавливаю их в переменные моих сеансов, они имеют идеальное значение, но если я попытаюсь использовать их в другом файле, он получит только заголовок cookie, но не мои переменные. Я использую postman, если это имеет значение.

Мой server.js

 var express = require('express'),
    bodyparser = require('body-parser'),
    validator = require('express-validator'),
    session = require('express-session'),
    app = express();

var consign = require('consign');
app.use(bodyparser.urlencoded({ extended: true }));
app.use(bodyparser.json())
app.use(validator())
app.use(session({
    secret: 'iau#$%#$Hgs@#t4',
    resave: false,
    saveUninitialized: false
}))

consign()
    .include('./src/routes')
    .then('./src/controllers')
    .then('./src/config/conexao.js')
    .then('./src/models')
    .then('./src/utils')
    .into(app);


app.listen(3000, function () {
    console.log("Servidor ON");
});

module.exports = app;
  

Функция, которая аутентифицирует пользователя:

 module.exports.autenticar = function (app, req, res) {

    var valido = app.src.utils.functions.validaUsuarioLogin(app, req);
    if (valido == true) { //true significa que não deu erro
        const conexao = new app.src.config.conexao.Conexao(),
            usuario = new app.src.models.usuariosDAO.UsuariosDAO()
        let dadosusuario = req.body;

        usuario.autenticar(conexao, dadosusuario, (err, result) => {
            if (err) {
                res.json(conexao.trataErros(err))
            } else if (result.length != 0) {
                //Permissoes Gerais
                req.session.exibecadastros = result[0].exibecadastros
                //Permissoes para Tarefas
                req.session.aprovatarefa = result[0].aprovatarefa;
                req.session.cancelatarefa = result[0].cancelatarefa
                req.session.alteratarefa = result[0].alteratarefa
                req.session.criatarefa = result[0].criatarefa
                //Permissao para Cargos
                req.session.criacargo = result[0].criacargo
                req.session.atualizacargo = result[0].atualizacargo
                req.session.deletacargo = result[0].deletacargo
                req.session.visualizacargos = result[0].visualizacargos
                console.log(req.session) //here we have data from the variables above
                //   res.json(result)
            }
            else {
                let msg = {
                    msg: "Nenhum usuario encontrado com essas informações."
                }
                res.send(msg)
            }
        }) //saindo da função de autenticação
    } else {
        res.send(valido)
    }
}
  

мой маршрут, который я хочу защитить:

 module.exports = function (app) {
    app.get('/cargos', function (req, res) {
        console.log(req.session) // Here I have only cookie headers
        app.src.controllers.cargos.getCargos(app, req, res)
    });
}
  

Это console.log(req.session) в нем говорится

 Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }
  

Ответ №1:

Исходя из моего собственного опыта работы с express.js /cookies / session и тестирования через Postman, я обнаружил, что если он не поддерживает файлы cookie. Мне всегда приходилось самому добавлять файл cookie / сеанс в Postman или записывать сеанс с помощью плагина Postman в Chrome на самом сайте.

Попробуйте выполнить шаги непосредственно в браузере или убедитесь, что вы добавили файл cookie, который возвращается при следующем отправленном вами запросе.

Комментарии:

1. Я попытался напрямую в браузере и столкнулся с той же проблемой ` if (req.session.visualizacargos == true) { app.src.controllers.cargos.getCargos(app, req, res) } else { res.send(«Не удается получить доступ») }` Когда я создал console.log (req.session.visualizacargos) на контроллере, который выполняет аутентификацию, он говорит, что переменная имеет значение true…

2. Вы пробовали регистрировать другие конкретные значения, которые вы хотите видеть? Из того, что я вижу в коде, похоже, что он должен работать, но я не знаком с consign и тем, как он загружает промежуточное программное обеспечение. Хотя я только что заметил, что в вашей «Функции, которая аутентифицирует пользователя», описанной выше, у вас нет разрешения. [что-то] внутри «еще, если (результат. длина != 0) {«. Возможно, что файл cookie, используемый для идентификации сеанса, не отправляется обратно с успешным результатом. Попробуйте добавить что-то вроде res.status(200); res.end(); чтобы убедиться, что это полностью транзакция.