使用Nodejs和Express服务器,我试图阻止任何人在不登录的情况下访问我的第二组路由,虽然这很有效,但如果会话没有检测到会话令牌中的电子邮件,我会陷入重定向循环。我相信它试图检查/users端点的req.session.email,也会导致重定向循环,但由于在我认为/users终结点将避免检查之后使用了会话检查中间件。
我如何组织我的代码,使书籍端点只有在req.session.email得到满足时才能到达,并且当有人试图在没有登录的情况下访问它时,不会陷入重定向循环?
app.use('/users', users)
app.use((req, res, next) => {
if(!req.session.email){
res.redirect('/login')
}
else{
next();
}
})
app.use('/books', books);
app.use
语句的顺序在这种情况下并不重要;如果只检查/books
端点,则可以将中间件添加到路由级别。
const yourMiddlewareFunction = (req, res, next) => {
if(!req.session.email){
res.redirect('/login')
}
else{
next();
}
}
app.use('/books', yourMiddlewareFunction, books);
如果你只想保护/books
端点,你可以这样做:
function requireLogin(req, res, next) {
if(!req.session.email){
res.redirect('/login')
}
else{
next();
}
}
app.use('/books', requireLogin, books);