我创建了一个函数来检查用户是否经过身份验证: -
app.use(compression({threshold:1}));
app.use(logger('dev'));
app.use(session({
secret:'node.js app',
resave:false,
saveUninitialized:true,
cookie:{secure:true}
}))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
function CheckAuth(req,res,next){
if(!req.session.authenticated){
res.redirect('/users/login');
return;
}
next();
}
用作中间件
app.use(CheckAuth);
但是该函数多次运行并且多次重定向并停止页面加载。
答案 0 :(得分:1)
您需要路由'/ users / login',否则您将被重定向回同一个地方,并且无限循环地反复调用CheckAuth。
答案 1 :(得分:1)
您需要进行多次重定向,因为中间件也在/users/login
中运行
您应该将其添加到您的中间件功能检查中。
function CheckAuth(req,res,next){
if(!req.session.authenticated && req.url != '/users/login'){
res.redirect('/users/login');
return;
}
next();
}
答案 2 :(得分:1)
您将中间件用于所有路由,以便重定向永远循环。
因此,您需要明确指定需要保护的路线。代码可能是这样的:
//routes without auth guard
app.post('/users/login', login);
app.post('/users/register', register);
//routes guarded by auth
app.get('/api/xxx', CheckAuth, xxx);
app.post('/api/yyy', CheckAuth, yyy);