我是新来表达的,我正在尝试在用户登录我的应用程序时创建会话。我正在使用护照进行身份验证。要登录用户,我正在创建基本策略,基本策略成功后,我创建了一个JWT令牌,我将其存储在客户端的cookie中,并使用JWT策略进行后续请求。
但是我注意到,当我登录时,express-session正在创建一个会话,其中有Basic头,另一个会话用于具有JWT头的后续调用。
这是我在登录时保存会话的代码
@RequestMapping(value = "/search", method = RequestMethod.POST)
public String handleRequest(@RequestParam String search,
ModelMap model){
List<UserInfo> inf = searchServ.listPeople(search);
model.put("inf", inf);
return "info";
}
但是当我调试这段代码时,它会在req.sessionID中显示一个sessionID,并在以下代码中显示req.sessionID中的不同sessionID,作为JWT身份验证
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);
};
我希望它在整个生命周期中都是相同的sessionID,直到用户退出我的应用程序。 为什么会发生这种情况?它有什么解决方案?
答案 0 :(得分:1)
您在保存会话之前发送了响应。
尝试保存会话,然后发送响应。
express-session
修改res.end
以使其执行express-session
具体任务,介绍您是受害者的顺序耦合:https://github.com/expressjs/session/blob/master/index.js#L249