0

ユーザー名/パスワード戦略でPassportJSを使用して、Web サイトでユーザーを認証しています。ユーザーが HTTPS 経由でログインする必要があることを確認し、セッション cookie が HTTPS 経由でのみ送信されることを確認しました。

app.use(express.session({
    // ...
    cookie: { secure:true }
}));

しかし現在、誰かが (HTTPS 経由で) ログインし、HTTP 経由で Web サイトに戻った場合、ブラウザが Cookie を送信しないため、ログインしていないように見えます。

ログインしているユーザーを HTTPS にリダイレクトしたいと考えています。

私は 2 つの Cookie を発行する必要があると考えています。1 つはセッションの詳細を含むもの ( とマークsecure: true) で、もう 1 つは単に「ログインしています」と表示するもの ( とマークsecure: false) です。HTTP 経由で 2 番目の Cookie が表示された場合は、HTTPS にリダイレクトでき、安全な Cookie が送信されます。Presto: ログインしたユーザーは HTTPS にリダイレクトされます。

質問: Express でこれを行うにはどうすればよいですか?

4

2 に答える 2

1

誰かが HTTPS 経由でサイトにアクセスしたときにStrict-Transport-Security ヘッダーを追加します。これにより、次にサイトにアクセスしたときに、ブラウザーが HTTP を HTTPS に自動的に書き換えます。

app.use(function(req, res, next) {
    if (req.secure()) {
        res.header('Strict-Transport-Security', 'max-age=31536000');
    }

    next();
});
于 2013-03-29T14:53:51.110 に答える
0

ユーザーが正常にログインしたら、Cookie を設定します。

res.cookie('loggedin', '1', { secure : false /*, other options */ });

次に、その Cookie をチェックするミドルウェアを使用します。

app.use(function(req, res, next) {
  if (req.cookie.loggedin === '1' && ! req.secure())
  {
    res.redirect(HTTPS_LOCATION);
  }
  else
  {
    next();
  }
});

の値はHTTPS_LOCATIONセットアップによって異なりますが、おそらく を使用して構築できますreq.path

于 2013-03-27T08:42:22.553 に答える