首页 > 解决方案 > 使用 express-jwt 仅保护某些路由

问题描述

我有“公共”路由和“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) 之前,那么一切都会经过身份验证,包括安全路由和不安全路由。

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

标签: node.jsexpressjwtexpress-jwt

解决方案


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

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

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

推荐阅读