Как переопределить сообщение в формате DefaultHTTPErrorHandler по умолчанию

#go #jwt #go-echo #jwt-go

#Вперед #jwt #перейти-echo #jwt-go

Вопрос:

Я использую платформу Echo.

Как я могу изменить этот формат ответа на мой собственный формат его ошибки из библиотеки JWThttps://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)
            }
        }
    }
  

Ответ №1:

Сначала вам нужно перехватить ошибку из библиотеки JWT. Здесь вы можете найти пример ( ExampleParse_errorChecking ), как это сделать.

Когда вы узнаете об ошибке, вы можете вернуть свой пользовательский ответ или использовать пользовательский обработчик ошибок HTTP подробнее здесь

Пользовательский обработчик ошибок HTTP может быть установлен через e.HTTPErrorHandler

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

e.HTTPErrorHandler = customHTTPErrorHandler
  

Комментарии:

1. спасибо, пожалуйста, проверьте обновленный вопрос. как разрешить e.Debug