【问题标题】:Secure only some routes with express-jwt使用 express-jwt 仅保护某些路由
【发布时间】:2019-07-06 02:56:35
【问题描述】:

我有“公共”路由和“API”路由,应该由express-jwt 进行身份验证。

// define public routes in a router
const routerPublic = express.Router();
routerPublic.route("/login", (req, res) => /* whatever */);
routerPublic.route("/about-us", (req, res) => /* whatever */);
routerPublic.route("/foo/bar/baz", (req, res) => /* whatever */);

// define API routes in a router
const routerApi = express.Router();
routerApi.route("/api/v1/foo", (req, res) => /* whatever */);
routerApi.route("/api/v1/bar", (req, res) => /* whatever */);

// add routers to express app
app.use(routerPublic);                                 // (1)
app.use(routerApi, jwt({ secret: "secret" }));         // (2)

所以我填充了两个express.Router 实例——一个带有不安全的路由,另一个带有安全的路由。然后我将这些路由器加载到 express 应用程序中,只有受保护的路由应该经过身份验证。

但是顺序很重要。如果第 (1) 行在 (2) 之前,则它按预期工作。但如果 (2) 在 (1) 之前出现,那么一切都经过身份验证,包括安全路由和不安全路由。

所以有一个竞争条件,我不明白。

【问题讨论】:

  • 你试过用这个吗? app.use("/api/v1/", jwt({ secret: "secret" }));
  • @ShayMoshe 不,因为这在我的设计中不起作用。所有的例子都表明了这一点,但如果所有东西都在一个文件中,那是你可以编写的那种代码,而且没有设计可言。当有分离时,就需要更细粒度的控制,正如我所展示的,但它似乎并没有那样工作:(
  • 我想我知道什么可以帮助你,你使用新的快速路线,你可以试试这样的东西:routerApi.use(jwt({ secret: "secret" }))

标签: node.js express jwt express-jwt


【解决方案1】:

将其发布为答案以帮助他人,

您使用新的快速路线,您可以尝试这样的方式:

routerApi.use(jwt({ secret: "secret" }))

【讨论】:

  • 我忘了路由器本身就是一个小程序,所以它也可以带中间件!谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 2014-10-18
  • 1970-01-01
  • 2018-05-20
  • 2017-11-15
  • 2019-04-23
  • 2020-04-26
  • 2021-10-19
相关资源
最近更新 更多