【发布时间】:2014-10-24 23:14:47
【问题描述】:
我正在尝试从 socket.io 中解析签名的 cookie 以进行授权。我已经设置了一个简单的方法来执行此操作,确保在我的 express 和 socket.io 配置中使用相同的 cookie 密码。但是,在解析 cookie 时,我只看到“io”cookie 被解析,而不是“sid”cookie(来自 express 的那个)。
var config = require('config');
var cookieParser = require('cookie-parser');
var ioCookieParser = function () {
var parser = cookieParser.apply(null, arguments);
return function (socket, next) {
console.log('Parsing cookies:', socket.request.headers.cookie);
parser(socket.request, null, function () {
console.log('Parsed cookies:', socket.request.cookies);
console.log('Parsed signed cookies:', socket.request.signedCookies);
next();
});
}
};
io.use(ioCookieParser(config.server.cookieSecret));
在查看console.log 行的输出时,我看到了:
Parsing cookies: io=F2sP36OJqG35eon3AAAA; sid=s%3AoiVZO8uT6XEqZ7I149JMa0Vt0ebh_RMV.85jPEnUODVqcW100BuZankaJyqLLoEJ06goRgj6QK5I
Parsed cookies: { io: 'F2sP36OJqG35eon3AAAA' }
Parsed signed cookies: { sid: false }
您可以在第一行输出中清楚地看到sid 是在cookie 中定义的。但是,它没有被解析出来,如第二个输出行所示。我做错了什么?
编辑:我没有意识到签名的 cookie 位于单独的 request.signedCookies 对象中,但我现在看到它设置的是 { sid: false } 而不是值。
【问题讨论】:
标签: cookies express socket.io authorization session-cookies