2015-07-13 91 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在他們的評論中發現問題!