如何在响应之前访问Express(js)-session cookie serveride?

时间:2016-02-12 14:24:05

标签: express session-cookies passport.js express-session connect-mongo

在节点服务器上使用Express-session,Connect-mongo和PassportJS的组合我有以下验证功能:

expressApp.post('/login', function(req, res, next) {
    passport.authenticate('login', function(err, user, info) {
                if(err) {
                    return console.log(err);
                }
                if(!user){
                    res.set('WWW-Authenticate', 'x' + info);
                    return res.send(401);
                }
                req.login(user, function(err){
                    if(err) {
                        return console.log(err);
                    }
                    //I WANT TO ACCESS OUTGOING COOKIE HERE
                    //var cookie = res.get('SET-COOKIE');

                    res.redirect('/homepage');
                });
            }
        )(req, res, next)
    }
);

正如您在注释部分中所看到的,我希望在将响应发送到客户端之前访问cookie信息。我无法在'res'和'user'对象中找到任何此类数据。

特别是我正在寻找可以在HTTP响应中的'SET-COOKIE'标题中找到的相同字符串。

1 个答案:

答案 0 :(得分:0)

在从您的个人代码中调用res.redirect(..)之后,在 Express-session \ index.js 中创建SET-COOKIE标题字符串。

找到函数'setcookie',您将能够访问原始字符串(如果您愿意,可以篡改其创建)。 目前这意味着自定义内部快速会话代码并不理想。

修改 我收到了Express-session的撰稿人/开发人员Douglas Wilson的第二个建议:

快速会话模块在Node.js HTTP响应对象上设置它之前没有提供任何实际接口来检查它,但你可以在发送响应之前找到它,这可能会也可能不会根据您的用例工作,使用on-headers模块查看发送到客户端的标题:

var onHeaders = require('on-headers');

// ... later when you need to get to it

onHeaders(res, function () {
  // the final headers are visible here to read, remove, or alter
  console.dir(res.get('Set-Cookie'));
});

*Now, this may or may not be useful, depending on the reason you need that cookie.*