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 在他们的评论中解决了这个问题!