0

我正在使用带有用户名/密码策略的PassportJS来验证我网站上的用户。我已确保用户必须通过 HTTPS 登录,并且我已确保会话 cookie 仅通过 HTTPS 发送:

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

但是现在,如果有人登录(通过 HTTPS)然后通过 HTTP 返回网站,看起来他们没有登录,因为他们的浏览器没有发送 cookie。

我想将登录用户重定向到 HTTPS。

我认为我需要发布两个 cookie:一个带有会话详细信息(标记为secure: true),一个仅显示“您已登录”(标记为secure: false)。如果我通过 HTTP 看到第二个 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 回答