사용자 인증을 확인한 다음 해당 계정의 상태를 확인하는 내 /app
경로가있는 두 개의 미들웨어를 사용하려고합니다. 두 미들웨어를 모두 가지고 있지만, 내 req.session.accountStatus
이 제공 한 조건과 같지 않은 경우 무한 리디렉션으로 실행됩니다. 일반적으로 사용자가 리디렉션되는 페이지에만 액세스하도록해야합니다. 미들웨어를 잘못 사용하고 있습니까? 더 나은 접근 방법이 있습니까?ExpressJS - 미들웨어 리디렉션이 너무 많습니다.
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()){
return next();
}
res.redirect('/login');
}
function accountStatus(req, res, next) {
if(req.session.accountStatus == "active" || req.session.accountStatus == "trialing"){
return next();
} else {
//Endless loop. Need to fix
res.redirect('/app/settings/billing');
}
}
router.use(require('./site-routes'));
router.use('/app', isLoggedIn, accountStatus, require('./app-routes'));
이 훌륭한 솔루션입니다! 두 가지 빠른 질문을 통해 도움을받을 수 있습니다. 1.'/ login'은 제 'site-routes.js' 파일에 정의 된 경로입니다. 'app-routes.js' accountStatus 미들웨어 내에서이 경로로 리다이렉트를 추가 함에도 불구하고 두 파일 모두'router'에'.use'를 통해 첨부되기 때문에 라우트를 인식해야합니다, 맞습니까? 2. '설정/결제'가 'accountStatus' 미들웨어에 고정되어 있다고해도'라우터 '에 연결되어있어 여전히 전역 적으로 액세스 할 수 있습니까? – cphill
1. 예, 리디렉션은 클라이언트가 다른 페이지로 "이동"하기위한 지침입니다. 해당 페이지가 존재하는 한 제대로 작동합니다. 익스프레스에서 수행 한 "특수 처리"는 없습니다. 2. "미들웨어에 고정"이라는 의미가 무엇인지 모릅니다. '/ app/settings/billing'이 호출 될 때'accountStatus' 미들웨어가 호출되어서는 안됩니다 (적어도 당신이 원하는 것입니까, 아니면 질문을 오해 했습니까?). – robertklep
아니, 모두 의미가 있습니다. 도와 주셔서 정말 감사합니다! – cphill