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

Я следовал руководству по кулинарным книгам к письму, найденному здесь https://echo.labstack.com/cookbook/jwt

Но при использовании промежуточного программного обеспечения JWT у меня возникают некоторые проблемы с добавлением пользовательских сообщений об ошибках. Вход в систему работает нормально, даже до того, что не дает подробностей (имя пользователя и пароль), который возвращает 404.

Но когда JWT отсутствует, он возвращает 400, я хочу, чтобы он также возвращал 404.

Так что в своем исследовании я нашел это, https://forum.labstack.com/t/custom-error-message-in-jwt-middleware/325/3 котором перечислены следующие middleware.ErrJWTMissing & middleware.ErrJWTInvalid Но очень неясно, как их установить?

Я попытался установить их как Vars на файле роутера, так

var (
  ErrJWTInvalid = echo.NewHTTPError(http.StatusTeapot, "test 104")
  ErrJWTMissing = echo.NewHTTPError(http.StatusTeapot, "test 103")
)

Но ошибка, которая возвращается ко мне, это 400, а не 418 (так как это всего лишь тест). Так что я делаю не так?

1 ответ

Таким образом вы можете изменить код HTTP и сообщение.

func init() {
    middleware.ErrJWTMissing.Code = 401
    middleware.ErrJWTMissing.Message = "Unauthorized"
}

Во-первых, отметьте в своем заявлении, что вы хотите вернуть ошибку 400, а также ошибку 404 - вы не можете этого сделать. Вы отправляете один ответ с сервера, чтобы он получил ровно один код ответа. Вы можете отправить 207, но мы не говорим здесь о нескольких ресурсах, так что не делайте этого. На мой взгляд, ошибка 400 действительно является правильным ответом для отсутствующего JWT, поскольку это неверный запрос. 404 "Not Found" означает, что запрошенный ресурс (вещь на стороне сервера) не может быть найден. Это не значит, что что-то в запросе не найдено.

Что касается установки вашего собственного сообщения об ошибке, вам, вероятно, не повезет, не изменив исходный код для Echo. Этот конкретный ответ приходит из обработчиков промежуточного программного обеспечения самого пакета (вы можете увидеть его здесь). Это в основном абстрагировано от вас, поэтому, не глядя на внутреннюю работу пакета, невозможно было бы определить, откуда это происходит, и, честно говоря, с этим мало что можно легко поделать. ErrJWTMissing действительно является переменной, которую пакет использует внутри для этого сообщения об ошибке, но Echo, по-видимому, не предоставляет экспортированный метод установки для вас, чтобы изменить это значение, так что вы застряли на том, что это такое.

Если вы действительно хотите установить собственный метод ошибки для этого случая, я думаю, что ваши варианты будут:

  • Напишите свое собственное промежуточное программное обеспечение, чтобы перехватить запрос до того, как он был обработан промежуточным программным обеспечением Echo, где вы можете обработать запрос так, как захотите.
  • Отредактируйте источник Echo, чтобы он работал так, как вы хотели, чтобы он работал - в частности, все, что вам нужно сделать, это отредактировать ErrJWTMissing.

По сути, Echo пытается помочь вам, обрабатывая всю эту обработку промежуточного программного обеспечения для вас, и это большая работа или хакерство, чтобы отменить эту работу, все еще используя Echo.

Другие вопросы по тегам