我已按照烹饪书指南中的说明操作,位于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
,但是对于如何设置这些值还不清楚?
我尝试将它们设置为路由器文件上的var,就像这样
var (
ErrJWTInvalid = echo.NewHTTPError(http.StatusTeapot, "test 104")
ErrJWTMissing = echo.NewHTTPError(http.StatusTeapot, "test 103")
)
但是窗台再次出现的错误是400,而不是418(因为这只是测试)。那我在做什么错了?
答案 0 :(得分:0)
首先,您在语句中要返回400和404错误的点-您不能执行此操作。您正在从服务器发送一个响应,因此它仅获得一个响应代码。您可以发送207,但是在这里我们并不是在谈论多个资源,所以不要这样做。在我看来,对于缺少的JWT,400错误确实是正确的响应,因为这构成了错误的请求。 404“未找到”表示找不到请求的资源(服务器端的东西)。这并不意味着在请求中找不到某些内容。
关于设置自定义错误消息,在不更改Echo源代码的情况下,您很可能不走运。该特定响应来自包本身的中间件处理程序(您可以here看到)。这主要是从您那里抽象出来的,因此,如果不查看包的内部工作原理,就无法分辨出包的来源,坦率地说,您可以轻松地完成很多工作。 ErrJWTMissing确实是程序包内部用于此错误消息的变量,但是Echo似乎没有为您提供导出的setter方法来更改此值,因此您只能使用它的含义。
如果您真的想为这种情况设置自定义错误方法,我认为您的选择将是:
基本上,Echo试图通过为您处理所有这些中间件处理来取悦您,而在仍然使用Echo的情况下取消该工作是很多工作或黑客。
答案 1 :(得分:0)
您可以通过这种方式更改HTTP代码和消息。
func init() {
middleware.ErrJWTMissing.Code = 401
middleware.ErrJWTMissing.Message = "Unauthorized"
}