我的团队目前正在创建一个大型Express应用程序,我们想知道默认情况下“锁定”路由的最佳方法是什么,并且只有在我们添加中间件后才允许访问。
我开始编写一个未经授权的BayDefault()中间件。它将在全球范围内应用 app = express()。use(unauthorizedByDefault())并检查req.hasAuthMiddleware = true。
req.hasAuthMiddleware = true将由我在路由级别应用的身份验证中间件设置... app.post('/ user',authMiddleware.isAdminUser(),... 不幸的是,正如您可能已经猜到的那样,我的路由级中间件是在authorizedByDefault()运行后应用的,无论如何都会使每条路由都未经授权。
如何在我的其他中间件之后立即运行unauthorizedByDefault()而不将其添加到每个路由?或者还有另一种方法可以实现这个目标吗?
答案 0 :(得分:1)
可能不止一种方法来修饰这只猫,但是一个选项与排序有关,而且你可以在同一个挂载点上安装多个东西。因此,根据您使用中间件的方式,它可能看起来像这样:
app.post('/user', authMiddleware.isAdminUser());
app.use(unauthorizedByDefault());
app.post('/user', handleAPostToUser);
只要你的isAdminUser()
接下来打电话,后续的中间件仍然会被调用。
如果你的逻辑适用于路径上的所有动词,你也可以这样做:
app.use('/some-path', authMiddleware.isAdminUser());