ExpressJS - 中间件重定向太多

ExpressJS - Middleware Too Many Redirects

我正在尝试在我的 /app 路由中使用两个中间件来检查用户身份验证,然后检查他们的帐户状态。我有两个中间件,但在我的 req.session.accountStatus 不等于我提供的条件的情况下,我 运行 陷入无休止的重定向。一般来说,我试图强制用户只能访问被重定向到的页面。我以错误的方式使用中间件吗?有没有更好的方法?

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'));

将中间件移动到 app-router.js 可能更容易。

所以你的主文件只会做这个:

router.use('/app', require('./app-routes'));

app-routes.js 中,首先添加 URL 的路由,应该是 "open";

router.get('/settings/billing', ...);

后面是限制性中间件:

router.use(isLoggedIn, accountStatus);

其余路线紧随其后。

这样,对 /app/settings/billing 的任何请求都不会通过中间件,也不会导致重定向循环。

如果isLoggedIn对于/app开头的任何路由是强制性的,你可以用类似的方式使用它:

router.use(isLoggedIn);
router.get('/settings/billing', ...);
router.use(accountStatus);
router.get(...);