我在解析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
代碼與您的解析部分幾乎相同。但我不確定是否將它作爲中間件正確添加。它在會話中間件之前和路由器中間件之前。當我回家後,我會嘗試發佈整個代碼,也許會有任何想法.. –