简体   繁体   English

Express.JS上的会话Cookie

[英]Session Cookies on Express.JS

everyone! 大家!

I'm using Express-Session to manage my serverside session, so, when I get the user data and set it to my sessions variables it has value perfectly, but if I try to use them in other file, it get only the cookie header but not my variables. 我正在使用Express-Session来管理服务器端会话,因此,当我获取用户数据并将其设置为session变量时,它具有完美的价值,但是如果我尝试在其他文件中使用它们,则仅获得cookie标头但不是我的变量。 I'm using postman, if it matters. 如果有问题,我正在使用邮递员。

My server.js 我的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;

Function that autenticates the user: 使用户满意的功能:

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)
    }
}

my route that I want to protect: 我要保护的路线:

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

It this console.log(req.session) it says 它说这个console.log(req.session)

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

From my own experience in dealing with express.js/cookies/session and testing through Postman, I had found that if it doesn't maintain the cookies. 根据我自己在处理Express.js / cookies / session和通过Postman进行测试的经验,我发现它不能维护cookie。 I've always had to add the cookie/session myself to Postman or capture a session using the Postman plugin in Chrome on the actual site. 我一直不得不自己将Cookie /会话添加到Postman或使用实际网站上的Chrome中的Postman插件捕获会话。

Try doing the steps directly in a browser, or make sure you add the cookie that is returned to the next request you send. 尝试直接在浏览器中执行这些步骤,或确保您添加返回到您发送的下一个请求的cookie。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM