如何在响应之前访问 Express(js)-session cookie 服务器端?

How to access Express(js)-session cookie serverside before responding?

在节点服务器上结合使用 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' object.

中找到任何此类数据

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

SET-COOKIE header 字符串是在 Express-session\index.js after 调用后创建的,即res.redirect(..) 来自您的个人代码。

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

编辑: 我收到了 Douglas Wilson 的次要建议,contributor/developer for Express-session:

express-session 模块在将其设置到 Node.js HTTP 响应 object 之前不提供任何实际接口来检查它,但您可以访问它在发送响应之前,这可能会或可能不会工作取决于您的 use-case,使用 on-headers 模块查看 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.*