小编典典

在快速进入每条路线之前如何使用中间件检查授权?

node.js

当我输入我的Web应用程序的用户的URL时,我想检查他们的授权。但是,当我使用一个单独的中间件来检查授权时,它对于已经存在的路由是没有用的,例如:

function authChecker(req, res, next) {
    if (req.session.auth) {
        next();
    } else {
       res.redirect("/auth");
    }
}

app.use(authChecker);
app.get("/", routes.index);
app.get("/foo/bar", routes.foobar);

authChecker 是unabled检查谁进入两个URL的用户的权限。它仅适用于未指定的网址。

我看到了一种方法,可以将 authChecker 放在路由和路由处理程序之间,例如:

app.get("/", authChecker, routes.index);

但是,如何才能以一种简单的方式来实现它,而不是将authChecker放在每条路由中?


阅读 218

收藏
2020-07-07

共1个答案

小编典典

只要

app.use(authChecker);

在之前

app.use(app.router);

它将为每个请求被调用。但是,您将获得“太多重定向”,因为 所有ROUTES 都在调用它,包括 / auth
。因此,为了解决这个问题,我建议将函数修改为:

function authChecker(req, res, next) {
    if (req.session.auth || req.path==='/auth') {
        next();
    } else {
       res.redirect("/auth");
    }
}

这样,您也不会重定向身份验证URL。

2020-07-07