4

内部認証サービスを呼び出すパスポート戦略を実装しています。内部認証サービスはセッション ID を生成するため、接続セッションがデフォルトで生成された ID の代わりにその ID を使用していることを確認する必要があります。

これを行う方法はありますか?セッション ID を生成するために接続する独自のフック関数を提供することは可能ですか? connect が実際にセッションを作成するタイミングや方法を制御できないため、 session.id などを設定するほど簡単だとは想像できません。

誰かがこの問題を解決しましたか?

4

1 に答える 1

2

これは、Connect のセッション ミドルウェアの現在の実装では実行できませんが、セッション ミドルウェアをフォークして、セッション ID の生成方法、つまり次の行を変更できます。

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L202

「フォーク」とは、上記のファイルをコピーし、セッション ID の割り当てを変更し、セッション ミドルウェアを構成するときに代わりに新しいファイルを使用することを意味します。

アップデート:

カスタムIDでセッションを再生成する方法は次のとおりです(注-これは単なるアイデアであり、テストしていません):

// this is the function you'll be calling in your routes or whatever
req.regenerateSession = function(newSid) {
  // keep old session data
  var oldSessionData = req.session;

  // destroy current session and make a new one with your custom id
  store.destroy(req.sessionID, function() {
    store.generate(req, newSid);

    // copy back the session data
    // since you don't want to lose it probably
    req.session = oldSessionData;
  });
}

// replace the session store generate function to accept a custom sessionID
// https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L201
store.generate = function(req, customID) {
  req.sessionID = customID || utils.uid(24);
  req.session = new Session(req);
  req.session.cookie = new Cookie(req, cookie);
}
于 2012-05-22T13:00:07.337 に答える