如何在响应之前访问 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.*
在节点服务器上结合使用 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.*