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);
您是否嘗試添加sessionstore?另外:「saveUninitialized」禁用保存未修改的會話。這可能會導致你正在經歷的行爲。 – Dodekeract
試試'resave:true,saveUninitialized:true'。 –
將它們設置爲true做到了!我在會話文檔中發現了這一點:「請注意,如果您將Session與PassportJS結合使用,Passport會在用戶通過身份驗證後向會話中添加一個空的Passport對象,以作爲對會話的修改,從而導致它被保存起來。「身份驗證沒有發生,但推測是護照正在添加其他內容。 如果你們其中一個人想要添加答案,我很樂意接受它! – akroy