go - 如何覆盖 DefaultHTTPErrorHandler 格式消息

标签 go jwt go-echo jwt-go

我正在使用 Echo 框架。

如何将此格式响应更改为我自己的格式 它来自 JWT 库的错误 https://github.com/dgrijalva/jwt-go

{
  "message": "invalid or expired jwt"
}

我想改变这样的东西

{
  "meta": {
    "status": false,
    "message": "Unauthorized",
    "messages": null
  },
  "result": null
}

我找不到如何覆盖 DefaultHTTPErrorHandler

这个自定义的HttpErrorHandler

    e := echo.New()
    e.HTTPErrorHandler = func(err error, c echo.Context) {
        var (
            code = http.StatusInternalServerError
            msg  interface{}
        )

        type (
            Map map[string]interface{}
        )

        if he, ok := err.(*echo.HTTPError); ok {
            code = he.Code
            msg = he.Message
            if he.Internal != nil {
                err = fmt.Errorf("%v, %v", err, he.Internal)
            }
        } else if e.Debug {
            msg = err.Error()
        } else {
            msg = http.StatusText(code)
        }

        if _, ok := msg.(string); ok {
            msg = Map{"sempak": msg}
        }

        // Send response
        if !c.Response().Committed {
            if c.Request().Method == http.MethodHead {
                err = c.NoContent(code)
            } else {
                err = c.JSON(code, msg)
            }
            if err != nil {
                e.Logger.Error(err)
            }
        }
    }

最佳答案

首先,您需要从 JWT 库中捕获错误。 Here您可以找到一个示例 (ExampleParse_errorChecking) 如何执行此操作。

当您知道错误时,您可以返回您的自定义响应 或使用自定义 HTTP 错误处理程序 查看详情 here

Custom HTTP error handler can be set via e.HTTPErrorHandler

func customHTTPErrorHandler(err error, c echo.Context) {
    // ...
}

e.HTTPErrorHandler = customHTTPErrorHandler

关于go - 如何覆盖 DefaultHTTPErrorHandler 格式消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55513157/

相关文章:

authentication - 用于在多个服务器实例上运行的分布式系统的 JWT token

go - 如何在 labstack echo session 中间件中获得相同的 session ?

go - 如何使用 JWT 中间件的自定义错误设置

xml - 如何将大量数据编码为 XML

go - 在Helm模板中解压Go map 值

Docker Golang SDK - 如何将容器标准输出重定向到文件

java - 将jhipster后端和前端分离成两个项目?

java - 在 Web 服务之间共享 JJWT 签名

go - 避免在 labstack/echo 的路由中使用全局变量

go - 如何在没有隐式缓冲区的情况下将值从一个 Go channel 传输到另一个 channel ?