除非初始化passport.js,否则会话ID不会持久存在

时间:2015-07-13 05:30:45

标签: node.js session express passport.js

我有一个简单的通用快递应用程序。只要某个路线被击中,它就会记录req.sessionID。我希望刷新客户端页面会导致再次记录相同的sessionID。如果我已导入护照并在会话中间件之后添加了护照中间件,则可以使用。如果我要么根本不使用护照,要么在会话中间件之前添加护照中间件,那么sessionID每次都不同。

我可以接受中间件的排序可能很挑剔。但是,我的应用程序根本不使用护照,因此如果我不需要护照,我无法理解为什么我的应用程序无法正常工作。 会议是否需要护照?

    //generic express initialization
    var http = require('http');
    var express = require('express');
    var cookieParser = require('cookie-parser');
    var passport = require('passport');
    var session = require('express-session');

    var app = express();
    var server = http.createServer(app);
    var sessionMiddleware = session({resave: false, saveUninitialized: false, secret: 'hunter2'});
    app.use(cookieParser());


    //This works:
    app.use(sessionMiddleware);
    app.use(passport.initialize());

    //This doesn't:
    app.use(passport.initialize());
    app.use(sessionMiddleware);

1 个答案:

答案 0 :(得分:0)

切换到resave: true, saveUninitialized: true

未保存未修改的会话,从而导致重复生成新的会话ID。但是,Passport可能会在会话中进行一些初始化,这意味着会话不再是未修改的。

感谢@Dodekeract和@Swaraj Giri在评论中解决问题!