Express/Connect アプリケーションで署名付き Cookie を解析しようとしているときに問題が発生しました。
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
})
}));
ここで私が間違っていることを助けて指摘してください。ありがとうございました