4

認証が成功した後にのみセッションを作成する必要があります。

エクスプレスミドルウェアを使用してredisStoreベースのセッションを作成できましたが、最初のリクエストがサーバーに到達したときにセッションが作成されます。

しかし、認証が成功した後にのみセッションを作成するにはどうすればよいですか。少しグーグルして見つけましreq.session.regenerate()た(しかし、このスレッドで以下に述べられている問題を見つけました: Nodejs Connectを使用してセッションIDを再生成します

ただし、再生成の場合も、古いものがすでに作成されていて、同じパラメーターで作成されていると仮定して、新しいものを作成します。

したがって、認証が成功した後にのみ新しいセッションIDを作成する他の方法があります。

4

2 に答える 2

2

これはあなたが探している正確な答えではないかもしれませんが、将来の読者のためにタイトルに答えます:

私のアプリケーションを試してみたところ、express-sessionは session オブジェクトを操作した場合にのみセッション cookie を設定することに気付きました。

たとえば、次のコードを考えてみましょう。

app.post('/login', function (req, res) {
  var authenticated = false;
  if (req.session.authenticated) {
    // session cookie is already set
    authenticated = true;
  } else if (/*validate the user here*/) {
    console.log(' authenticating');
    authenticated = true;
    // if below line executes, the response will have Set-Cookie header
    req.session.authenticated = authenticated;
  }
  res.json({
    status: authenticated
    //if --^ false, no session cookie will be set since we didn't manipulate session object
  });
 });

リクエストはメモリ内にセッション オブジェクトを作成して使用しますが、ヘッダーは、作成されたセッション オブジェクトを操作 (または改ざん? ) したSet-Cookie場合にのみ送信されるようです。

応答とともにヘッダーを送信しSet-Cookie、セッション ID がクライアント側の Cookie に保存されていない限り、確立されたセッションとは見なされず、心配することはありません。

それが役に立てば幸い。

補足: これはクロスドメインの ajax リクエストの場合です。通常の http リクエストとは異なる場合があります。おそらく誰かがこれを確認できます

于 2015-11-26T12:52:34.233 に答える