如何为JWT中间件使用自定义错误设置

时间:2018-11-17 21:46:40

标签: go jwt echo-framework

我已按照烹饪书指南中的说明操作,位于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,就像这样

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

但是窗台再次出现的错误是400,而不是418(因为这只是测试)。那我在做什么错了?

2 个答案:

答案 0 :(得分:0)

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

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

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

  • 编写自己的中间件以在Echo的中间件处理请求之前拦截该请求,您可以在其中随意处理该请求。
  • 编辑Echo源以按照您希望的方式工作-具体来说,您要做的就是编辑ErrJWTMissing。

基本上,Echo试图通过为您处理所有这些中间件处理来取悦您,而在仍然使用Echo的情况下取消该工作是很多工作或黑客。

答案 1 :(得分:0)

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

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