node.js - 使用 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) 之前,那么一切都会经过身份验证,包括安全路由和不安全路由。
所以有一个竞争条件,我不明白。
解决方案
将其发布为答案以帮助他人,
您使用新的快速路线,您可以尝试这样的事情:
routerApi.use(jwt({ secret: "secret" }))
推荐阅读
- excel - XLSXWriter 和 Excel “=SORT()” 函数?
- ios - SwiftUI GeometryReader 使其内容加载两次
- rabbitmq - RabbitMQ:是否可以集群跨版本?
- python - 如何使用熊猫根据其他列中的值计算列中字符串的出现次数
- android - kotlin 的最小数据绑定示例
- c++ - 在 Windows 中,如何确定 GPU 是否可拆卸?
- javascript - 是否可以让 fetch 等待重定向?
- python - 我可以在用 ctypes 包装的函数上使用 dask.delayed 吗?
- unity3d - 统一机械。如何在禁用游戏对象之前重置动画
- google-cloud-platform - 将 Google Cloud Services (GCS) 添加到 kaggle notebook