更改 auth header 时,Express 会创建不同的 session

Express creates different session when auth header is changed

我是 express 新手,我正在尝试创建 session 当用户登录到我的 app.I 时正在使用护照进行身份验证。为了登录用户,我正在创建基本策略,在基本策略成功后,我正在创建一个 JWT 令牌,我将其存储在客户端的 cookie 中,并且我对后续请求使用 JWT 策略。

但我注意到 express-session 在我登录时正在创建一个 session,其中包含 Basic header 和另一个 session 用于后续调用,其中包含 JWT header.

这是我在登录时保存 session 的代码

signin = function(req, res, next) {
    passport.authenticate('basic', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) {
            return res.status(401).json({ error: 'message' });
        }
        var token = jwt.encode({ user: user}, config.db.secret);
        res.cookie('token', token, { maxAge: 900000, httpOnly: true, path: '\/', Secure: true });
        res.status(200).json({ success: true, firstName: user.firstName });
        delete user.password;
        req.session.user = user;
        req.session.save();
    })(req, res, next);
};

但是当我调试这段代码时,它在 req.sessionID 中显示了一个 sessionID 并且在下面的代码中显示了不同的 sessionID in req.sessionID 作为 JWT 身份验证

listProducts = function(req, res) {
    debugger;
    //here req.session.user is undefined which I have saved at login. and sessionID is also different
    res.json({ demo: 'response' });
};

我希望它在整个生命周期中都是相同的 sessionID,直到用户注销我的应用程序。 为什么会这样?有什么解决办法吗?

您在保存会话之前发送响应。

尝试保存会话,然后发送响应。

express-session 修改 res.end 以使其执行 express-session 特定任务,介绍您作为受害者的顺序耦合:https://github.com/expressjs/session/blob/master/index.js#L249