出于安全考虑,除非我添加特定于身份验证的中间件,否则如何强制所有路由都是未经授权的?

时间:2016-10-06 02:18:15

标签: node.js express passport.js

我的团队目前正在创建一个大型Express应用程序,我们想知道默认情况下“锁定”路由的最佳方法是什么,并且只有在我们添加中间件后才允许访问。

我开始编写一个未经授权的BayDefault()中间件。它将在全球范围内应用 app = express()。use(unauthorizedByDefault())并检查req.hasAuthMiddleware = true。

req.hasAuthMiddleware = true将由我在路由级别应用的身份验证中间件设置... app.post('/ user',authMiddleware.isAdminUser(),... 不幸的是,正如您可能已经猜到的那样,我的路由级中间件是在authorizedByDefault()运行后应用的,无论如何都会使每条路由都未经授权。

如何在我的其他中间件之后立即运行unauthorizedByDefault()而不将其添加到每个路由?或者还有另一种方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

可能不止一种方法来修饰这只猫,但是一个选项与排序有关,而且你可以在同一个挂载点上安装多个东西。因此,根据您使用中间件的方式,它可能看起来像这样:

app.post('/user', authMiddleware.isAdminUser());
app.use(unauthorizedByDefault());

app.post('/user', handleAPostToUser);

只要你的isAdminUser()接下来打电话,后续的中间件仍然会被调用。

如果你的逻辑适用于路径上的所有动词,你也可以这样做:

app.use('/some-path', authMiddleware.isAdminUser());