#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