node.js - express 进入每条路由前如何使用中间件检查授权?

标签 node.js express middleware

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

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 无法检查输入这两个网址的用户的权限。 它仅适用于未指定的 url。

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

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

但是我怎样才能以一种简单的方式来实现它,而不是把 authChecker 放在每条路线上呢?

最佳答案

只要

app.use(authChecker);

之前
app.use(app.router);

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

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

这样您也不会重定向到身份验证网址。

关于node.js - express 进入每条路由前如何使用中间件检查授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700729/

相关文章:

coldfusion - 当我从 CF6.1 迁移到 CF8 或 Railo3.1 时,有哪些陷阱在等着我?

javascript - 在使用 redux 使用react时,业务逻辑应该去哪里(action creators 或 reducers)?

node.js - Node 模块 ifx_db 在 linux 中安装失败

javascript - 为什么 grunt-contrib-concat 不应用我的流程回调?

javascript - 在了解刷新 token 、存储位置和方式以及存储内容方面需要帮助

node.js - 更新 Azure 中的 Node 应用程序

node.js - 无论如何,是否可以从快速中间件中获得的请求对象中删除任何内容?

javascript - 使用正则表达式字符动态创建正则表达式

javascript - Node js 中服务器执行期间的内存状态

node.js - 防止 NodeJS 中的并发处理