使用express-jwt只保护某些路由

时间:2019-02-12 12:46:53

标签: node.js express jwt 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)之前,那么所有内容都会经过身份验证,包括安全和不安全的路由。

所以有一个比赛条件,我听不懂。

1 个答案:

答案 0 :(得分:1)

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

您使用新的特快专递路线时,可以尝试以下操作:

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