Express在更改auth头时会创build不同的会话

我是新来expression,我试图创build会话时,用户login到我的应用程序。我正在使用护照进行身份validation。 要login用户,我正在创build基本策略和成功的基本策略我正在创build一个JWT令牌,我在客户端存储在cookie中,我使用JWT战略为随后的请求。

但我注意到,快速会话正在创build一个会话,当我login其中有基本标题和另一个会话为JWT标题的后续调用。

这里是我的代码,我login保存会话

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); }; 

但是当我debugging这个代码时,它显示了req.sessionID中的一个sessionID,并且在下面的代码中显示了不同的sessionID(在req.sessionID中),作为JWTauthentication

 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直到用户注销我的应用程序。 为什么这真的发生? 它的解决scheme是什么?

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

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

express-session修改res.end使其执行express-session具体任务引入顺序耦合你是受害者: https : //github.com/expressjs/session/blob/master/index.js#L249