更改 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
我是 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