我在解析express/connect应用程序中的签名cookie时遇到问题。连接签名的cookie解析falsy
io.set('authorization', function (handshakeData, callback) {
if(handshakeData.headers.cookie) {
var signedCookies = cookie.parse(decodeURIComponent(handshakeData.headers.cookie));
handshakeData.cookie = connect.utils.parseSignedCookies(signedCookies, secret);
} else {
return accept('No cookie transmitted', false);
}
callback(null, true); // error first callback style
});
发生什么情况是调用connect.utils.parseSignedCookies
返回空对象。我查看了解析函数的源代码,发现它调用了unsign方法,该方法获取编码值的子字符串,然后尝试用相同的秘密再次对其进行签名,并比较结果以验证其编码的值相同,出于某种原因失败并且值不匹配。我不知道我做错了什么,为什么这些值不同,为什么我无法获得正确的会话ID。
我的应用程序初始化代码如下所示:
app.use(express.cookieParser(secret));
app.use(express.session({
key: 'sessionID',
secret: secret,
maxAge: new Date(Date.now() + 3600000),
store: new RedisStore({
client: redisClient
})
}));
请帮助,并指出我在做什么错在这里。谢谢
谢谢您的回答,这种方式更有意义,做到这一点,但遗憾的是它不工作,要么出于某些原因。下面是已签名和重新签名的值的截图 - 它仍然不同:http://grab.by/qyra我真的不知道该怎么办... –
你是如何在你的代码中使用cookie解析器的? – hexacyanide
代码与您的解析部分几乎相同。但我不确定是否将它作为中间件正确添加。它在会话中间件之前和路由器中间件之前。当我回家后,我会尝试发布整个代码,也许会有任何想法.. –