Session ID 不会持续存在,除非 passport.js 被初始化
Session IDs don't persist unless passport.js is initialized
我有一个简单的通用快递应用程序。每当命中某条路线时,它都会记录 req.sessionID
。我希望刷新客户端页面会导致再次记录相同的 sessionID
。这有效,如果我导入了护照并在 session 中间件 之后添加了护照中间件。如果我根本不使用 passport,或者我在 session 中间件之前添加 passport 中间件,那么 sessionID
每次都不一样。
我可以接受中间件的排序可能很挑剔。但是,我的应用程序根本不使用护照,所以如果我不需要护照,我无法理解为什么我的应用程序无法运行。 session 工作需要护照吗?
//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);
切换到 resave: true, saveUninitialized: true
没有保存未修改的会话,因此导致重复生成新的会话 ID。然而,Passport 可能正在对会话进行一些初始化,这意味着会话不再是未修改的。
感谢@Dodekeract 和@Swaraj Giri 在他们的评论中解决了这个问题!
我有一个简单的通用快递应用程序。每当命中某条路线时,它都会记录 req.sessionID
。我希望刷新客户端页面会导致再次记录相同的 sessionID
。这有效,如果我导入了护照并在 session 中间件 之后添加了护照中间件。如果我根本不使用 passport,或者我在 session 中间件之前添加 passport 中间件,那么 sessionID
每次都不一样。
我可以接受中间件的排序可能很挑剔。但是,我的应用程序根本不使用护照,所以如果我不需要护照,我无法理解为什么我的应用程序无法运行。 session 工作需要护照吗?
//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);
切换到 resave: true, saveUninitialized: true
没有保存未修改的会话,因此导致重复生成新的会话 ID。然而,Passport 可能正在对会话进行一些初始化,这意味着会话不再是未修改的。
感谢@Dodekeract 和@Swaraj Giri 在他们的评论中解决了这个问题!