3

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
    })
}));

ここで私が間違っていることを助けて指摘してください。ありがとうございました

4

2 に答える 2

0

Cookie/sessions/socket.io などで左右に問題がありました。最終的に助けてくれたのは @vytautas コメントでした。誰かがこれを見た場合は、正しいホストに接続していることを確認してください。ローカルホストまたは IP アドレスとして設定しているか、または何を持っているかは関係ありません。そうしないと、受信 Cookie を解析できません。

(後から考えると明らかなようです。)

于 2014-01-05T07:48:09.040 に答える