【发布时间】:2015-10-01 06:43:44
【问题描述】:
我有一个简单的通用快递应用程序。每当到达某个路线时,它就会记录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);
【问题讨论】:
-
你试过添加 sessionstore 吗?另外:“saveUninitialized”禁止保存未修改的会话。这可能会导致您遇到的行为。
-
试试
resave: true, saveUninitialized: true。 -
将这些设置为 true 做到了!我在会话文档中找到了这一点:“请注意,如果您将 Session 与 PassportJS 结合使用,Passport 将在会话中添加一个空的 Passport 对象以供用户通过身份验证后使用,这将被视为对会话的修改,导致它要被拯救。”身份验证尚未发生,但大概护照正在添加其他内容。如果你们中的某个人想添加答案,我很乐意接受!
标签: node.js session express passport.js