Node.js 在Express中将登录用户重定向到https?
我正在使用用户名/密码策略对网站上的用户进行身份验证。我已确保用户必须通过HTTPS登录,并且我已确保会话cookie仅通过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:一个带有会话详细信息(
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();
});