1

我已经按照这封信的烹饪书籍指南,在这里找到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.ErrJWTMissingmiddleware.ErrJWTInvalid但不清楚如何设置这些?

我已经尝试将它们设置为路由器文件上的变量,就像这样

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

但是 sill 返回给我的错误是 400 而不是 418(因为这只是一个测试)。那么我做错了什么?

4

2 回答 2

1

您可以通过这种方式更改 HTTP 代码和消息。

func init() {
    middleware.ErrJWTMissing.Code = 401
    middleware.ErrJWTMissing.Message = "Unauthorized"
}
于 2019-08-21T16:46:41.810 回答
0

首先,您要返回 400 和 404 错误的声明中的一点 - 您不能这样做。您正在从服务器发送一个响应,因此它只获得一个响应代码。您可以发送 207,但我们并不是真的在这里谈论多个资源,所以不要那样做。在我看来,400 错误确实是缺少 JWT 的正确响应,因为这构成了错误请求。404“未找到”意味着找不到请求的资源(服务器端的东西)。这并不意味着无法找到请求中的某些内容。

至于设置自定义错误消息,如果不更改 Echo 的源代码,您可能会很不走运。该特定响应来自包本身的中间件处理程序(您可以在此处查看)。这主要是从您那里抽象出来的,因此如果不查看包的内部工作原理,就无法知道这是从哪里来的,坦率地说,您可以轻松地做很多事情。ErrJWTMissing 确实是包内部用于此错误消息的变量,但 Echo 似乎没有提供导出的 setter 方法供您更改此值,因此您无法理解它的含义。

如果您真的想为这种情况设置自定义错误方法,我认为您的选择是:

  • 编写您自己的中间件以在请求被 Echo 的中间件处理之前拦截请求,您可以在其中处理任何您想要的请求。
  • 编辑 Echo 源以按照您希望的方式工作 - 具体而言,您所要做的就是编辑 ErrJWTMissing。

基本上,Echo 试图通过为您处理所有这些中间件处理来帮助您,并且在仍然使用 Echo 的同时取消这些工作是很多工作或黑客行为。

于 2018-11-18T09:07:00.133 回答