2015-07-13 90 views
1

我有一个简单的通用快速应用程序。每当某条路线被击中时,它就会记录req.sessionID。我认为刷新客户端页面会导致再次登录相同的sessionID。如果我已经导入护照并在会话中间件后添加了护照中间件,则这起作用,。如果我根本没有使用护照,或者我在会话中间件之前添加了护照中间件,那么sessionID每次都是不同的。除非passport.js被初始化,否则会话ID不会保留

我可以接受中间件的排序可以挑剔。然而,我的应用根本不使用护照,所以我无法理解为什么我的应用不工作,如果我不需要护照。 会议需要护照吗?

//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); 
+2

您是否尝试添加sessionstore?另外:“saveUninitialized”禁用保存未修改的会话。这可能会导致你正在经历的行为。 – Dodekeract

+2

试试'resave:true,saveUninitialized:true'。 –

+1

将它们设置为true做到了!我在会话文档中发现了这一点:“请注意,如果您将Session与PassportJS结合使用,Passport会在用户通过身份验证后向会话中添加一个空的Passport对象,以作为对会话的修改,从而导致它被保存起来。“身份验证没有发生,但推测是护照正在添加其他内容。 如果你们其中一个人想要添加答案,我很乐意接受它! – akroy

回答

0

切换到resave: true, saveUninitialized: true

未修改的会话没有被保存,从而导致重复产生新的会话ID。然而,护照大概是在会话中进行了一些初始化,这意味着会话不再未经修改。

感谢@Dodekeract和@Swaraj Giri在他们的评论中发现问题!