这是我第一次使用Express'app.all()
。当用户通过外部oAuth提供商注册时,我仍然需要他们在返回网站后提供电子邮件。我基本上是在数据库中将它们设置为非活动状态并检查req.session.active
。
我正在做的是
app.all('*', function(req, res, next) {
if(!req.session.active) {
if(req.path == '/complete_signup') {
next();
} else {
return res.redirect('/complete_signup');
}
}
});
但这似乎不起作用。如何正确检查用户是否已被重定向?
如果您可以推荐除app.all()
以外的方法,那也可以。
编辑:
第二眼看,这是有效的,但是由于它们与req.path
不匹配,所以外部资源(样式表,javascripts等)似乎都没有加载。
答案 0 :(得分:1)
您可以使用express-redirect-loop
中间件(由于HTTP Referrer标头不可靠而使用会话)。这仅适用于支持cookie存储/ jar(例如浏览器)的请求。
const express = require('express');
const session = require('express-session');
const redirectLoop = require('express-redirect-loop');
const app = express();
app.use(
session({
secret: 'test',
resave: false,
saveUninitialized: true
})
);
app.use(redirectLoop());
app.get('/', (req, res) => res.sendStatus(200));
app.get('/bar', (req, res) => res.redirect('/foo'));
app.get('/foo', (req, res) => res.redirect('/foo'));
app.get('/baz', (req, res) => res.redirect('/bar'));
app.listen(3000);