【问题标题】:Session is not working + express会话不工作+快递
【发布时间】:2018-11-22 23:56:36
【问题描述】:

我在我的应用程序中使用 express-session。我尝试过的是(POC):。

server.js

    app.use(session({
        secret: 'pal!lap789',
        // create new redis store.
        store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
        saveUninitialized: false, 
        key: 'user_sid',   
        resave: false,
        cookie: { secure: false, httpOnly: false }
    }));
app.get('/abcd', sessionChecker, function(req, res){
    res.send("hiiiii");
});

app.get('/session', (req, res) => {
    req.session.user = "subbuvlb@gmail.com";
    res.send("hgdhjdgjds")
});

它工作正常,

但是当我尝试与我的项目集成时,它不起作用。

app.use(session({
            secret: 'pal!lap789',
            // create new redis store.
            store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
            saveUninitialized: false, 
            key: 'user_sid',   
            resave: false,
            cookie: { secure: false, httpOnly: false }
        }));
var usersRouter = require('./router/users');
app.use('/users', usersRouter);

router/user.js

const express = require('express');  -------------> New express instantiated.
const router = express.Router();
router.post('/register', (req, res, next) => {
req.session.user = "emailid"
});

我想要实现的是have to check if user session is there for each resquest

所以我修改了我的 server.js 文件如下:

    app.use(session({
                    secret: 'pal!lap789',
                    // create new redis store.
                    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
                    saveUninitialized: false, 
                    key: 'user_sid',   
                    resave: false,
                    cookie: { secure: false, httpOnly: false }
                }));
        var usersRouter = require('./router/users');
        app.use('/users', usersRouter);
    var sessionChecker = (req, res, next) => {
console.log(req.session.user) --------------------------->Undefined
      if (req.session.user && req.cookies.user_sid) { 
          next();
      } else {
          res.redirect('/login');
      }    
    };
var usersRouter = require('./router/users');
app.use('/users',sessionChecker, usersRouter);

如果我在 server.js 中指定路由器文件,为什么会出现 req.user.undefined。我想我解释得很清楚,准备好在需要时提供更多输入。请提供您的想法。提前致谢。

【问题讨论】:

    标签: javascript node.js express session


    【解决方案1】:

    server.js 文件中定义全局变量

    global.express = require('express'); 
    global.app = express();
    global.session = require('express-session');
    
     app.use(session({
                        secret: 'pal!lap789',
                        store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
                        saveUninitialized: false, 
                        key: 'user_sid',   
                        resave: false,
                        cookie: { secure: false, httpOnly: false }
                    }));
    
        var sessionChecker = (req, res, next) => {
    
          if (req.session.user && req.cookies.user_sid) { 
              next();
          } else {
              res.redirect('/login');
          }    
        };
    
    var usersRouter = require('./router/users');
    app.use('/users',sessionChecker, usersRouter);
    

    在你的router/user.js

    const router = express.Router(); // use global express defined in server.js
    
    router.post('/register', (req, res, next) => {
      req.session.user = "emailid"
    });
    

    【讨论】:

    • 谢谢,但 req.session.user 仍然是 Undefined
    • 你在用passportjs吗?
    • 是的,但是对于其他模块。
    • 尝试访问路由器文件中的 req.session.user 时会话为空,但如果我尝试访问 server.js 文件中的 req.session.user 则它在那里。为什么??
    【解决方案2】:

    我终于明白了,

    我从Angular.js 前端检查,默认情况下Angular 不会包含Cookies,所以我在Angular 前端的每个请求中设置了{"withCredentials": "true"}

    【讨论】:

      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2012-02-13
      • 2016-01-24
      • 1970-01-01
      相关资源
      最近更新 更多