应使用 group().use() 统一挂载 auth 中间件,确保前置校验顺序执行;中间件内须显式调用 c.next() 放行,校验失败时返回 401 并 return,jwt 解析需手动提取 header、容错处理且不可 panic。

怎么给 Fiber 路由组加统一的 auth 中间件
直接用 Use() 方法挂载中间件,它会作用于该路由组下所有子路由,包括嵌套的子组。这是最常用、也最可靠的方式,不是靠装饰器或配置项“自动生效”,而是显式声明执行顺序。
为什么不能只在 group 定义时写 Get() 里传中间件
因为 Get()、Post() 等方法只对单个路由生效;如果一组里有 12 个接口,挨个传中间件不仅重复,还容易漏掉新加的路由。更关键的是:中间件执行顺序依赖注册顺序,靠单个路由传参无法保证前置校验逻辑一定先跑。
-
app.Get("/api/user", handler, authMw)→ 只保护这一个 -
api := app.Group("/api")+api.Use(authMw)→ 保护整个/api/* - 子组如
v1 := api.Group("/v1")会继承api.Use()的中间件,无需重复挂载
authMw 函数里必须手动调用 c.Next()
这是 Fiber 中间件链能继续往下走的关键。不写这句,后续路由处理器根本不会执行,请求就卡在中间件里了。常见错误是写了校验逻辑但忘了放行,结果所有接口都返回空响应或超时。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 校验失败时,应调
c.Status(401).SendString("unauthorized")并 return,避免执行c.Next() - 校验成功后,必须调
c.Next(),否则请求流中断 - 不要在中间件里用
return提前结束却漏掉c.Next(),这是调试时最常翻的车
JWT 校验中间件要注意 token 提取位置和解析容错
Fiber 默认不自动解析 Authorization header,得自己拆 Bearer xxx。JWT 解析失败(过期、签名错、字段缺失)不能 panic,要转成 401 响应,否则整个中间件链崩掉,影响所有接口。
- 从
c.Get("Authorization")拿头信息,再用strings.CutPrefix()去掉"Bearer " - 用
jwt.ParseWithClaims(token, &MyClaims{}, keyFunc),别用无 claims 的简版 -
keyFunc必须返回非 nil key,否则解析直接报错;建议用func(token *jwt.Token) (interface{}, error)显式判断 alg - 解析返回
err != nil时,一律c.Status(401).SendString("invalid token"),不 panic 不 log.Fatal
真正容易被忽略的是中间件的错误传播方式——Fiber 不像 Express 那样靠 next(err) 向上抛,所有错误都得手动响应并终止流程;一旦在 authMw 里 panic,整个服务可能因未捕获而 crash。所以校验逻辑必须全量覆盖边界情况,不能依赖“框架兜底”。










