更改auth标头时,Express会创建不同的会话

时间:2017-05-14 06:30:26

标签: node.js session express passport.js express-session

我是新来表达的,我正在尝试在用户登录我的应用程序时创建会话。我正在使用护照进行身份验证。要登录用户,我正在创建基本策略,基本策略成功后,我创建了一个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,直到用户退出我的应用程序。 为什么会发生这种情况?它有什么解决方案?

1 个答案:

答案 0 :(得分:1)

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

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

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