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

Я следовал руководству по кулинарным книгам к письму, найденному здесь 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 Ответ

0 голосов
/ 18 ноября 2018

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

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

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

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

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

...