【问题标题】:Session IDs don't persist unless passport.js is initialized除非初始化 passport.js,否则会话 ID 不会持续存在
【发布时间】: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


【解决方案1】:

切换到resave: true, saveUninitialized: true

未修改的会话未被保存,从而导致重复生成新的会话 ID。然而,Passport 可能正在对会话进行一些初始化,这意味着会话不再是未修改的。

感谢 @Dodekeract 和 @Swaraj Giri 在他们的 cmets 中解决问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2015-04-02
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多