【发布时间】: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