You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Echo JWT自定义代码失效:如何实现无Bearer校验及自定义错误返回?

Echo JWT 自定义配置解决方案

修改后的完整代码

import (
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

// 你的业务代码...

output := middleware.JWT(&middleware.JWTConfig{
    SigningKey:  []byte(key.EnvSecretKey),
    TokenLookup: "header:Authorization",
    // 关闭Bearer前缀校验,直接使用header中的Token值
    AuthScheme: "",
    ErrorHandler: func(c echo.Context, err error) error {
        // 根据错误类型返回专属提示
        switch err {
        case middleware.ErrJWTMissing:
            return c.JSON(echo.ErrUnauthorized.Code, map[string]string{
                "message": "Token不存在,请携带有效Token",
            })
        case middleware.ErrJWTInvalid, middleware.ErrJWTSignature:
            return c.JSON(echo.ErrUnauthorized.Code, map[string]string{
                "message": "Token无效,请检查后重试",
            })
        case middleware.ErrJWTExpired:
            return c.JSON(echo.ErrUnauthorized.Code, map[string]string{
                "message": "Token已过期,请重新获取",
            })
        default:
            return c.JSON(echo.ErrBadRequest.Code, map[string]string{
                "message": "身份验证失败",
            })
        }
    },
})

关键修改说明

  • 无需Bearer关键字校验:添加AuthScheme: ""配置,默认情况下echojwt会要求Token前缀为Bearer ,设置为空字符串后,会直接将Authorization header的内容作为Token进行校验。
  • 专属错误信息返回:通过switch判断echojwt内置的错误类型,分别处理Token缺失、无效/签名错误、过期等场景,返回语义明确的提示信息,同时使用符合HTTP规范的状态码(如401 Unauthorized)。

新手建议

  • 包版本兼容:确保使用echo v4版本的middleware包,避免因版本差异导致的配置不生效问题。
  • HTTP状态码规范:身份验证类错误优先使用401(Unauthorized),而非400(Bad Request),更贴合HTTP协议语义。
  • 错误返回格式:使用JSON对象返回错误信息,前端可以直接解析字段进行处理,比纯字符串更友好。
  • 调试技巧:如果遇到未覆盖的错误场景,可以在ErrorHandler中打印错误类型(fmt.Printf("error type: %T", err)),快速定位问题。
  • 安全实践:继续保持将SigningKey存入环境变量的做法,不要硬编码敏感信息。

内容的提问来源于stack exchange,提问作者madol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:35:20