1

在节点服务器上使用 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”标头中找到的相同字符串。

4

1 回答 1

1

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

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

编辑: 我收到了 Express-session 的贡献者/开发者 Douglas Wilson 的第二条建议:

express-session 模块在将其设置在 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.*
于 2016-02-13T12:11:21.143 回答