Node.js 在Express中将登录用户重定向到https?

Node.js 在Express中将登录用户重定向到https?,node.js,express,passport.js,Node.js,Express,Passport.js,我正在使用用户名/密码策略对网站上的用户进行身份验证。我已确保用户必须通过HTTPS登录,并且我已确保会话cookie仅通过HTTPS发送: app.use(express.session({ // ... cookie: { secure:true } })); 但是现在,如果有人登录(通过HTTPS),然后通过HTTP返回网站,看起来他们没有登录,因为他们的浏览器没有发送cookie 我想将登录的用户重定向到HTTPS 我想我需要发布两个cookie:一个带有会话详细信息(

我正在使用用户名/密码策略对网站上的用户进行身份验证。我已确保用户必须通过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中执行此操作?

当用户成功登录时,设置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\u LOCATION
的值取决于您的设置,但您可能可以使用
req.path
在有人通过HTTPS访问站点时添加
严格的传输安全性。这将导致他们的浏览器在下次访问站点时自动将HTTP重写为HTTPS

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

    next();
});