Go语言 为什么我的echo jwt自定义代码不起作用?

waxmsbnn  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(225)

我正在验证用户使用echo jwt,我正在定制,而看手册,但它没有应用,有两件事我想要的。
1.我想在没有bearer关键字的情况下进行令牌检查
1.我希望返回一个错误消息,该消息适合于找不到令牌或令牌无效的情况。
我怎样修改上面的代码来达到我的目的?
我刚开始学戈朗语,有什么建议我会很感激的

output := echojwt.JWT(&echojwt.Config{
        SigningKey:  []byte(key.EnvSecretKey),
        TokenLookup: "header:Authorization",
        ErrorHandler: func(c echo.Context, err error) error {
            if err != nil {
                return c.JSON(400, "custom error")
            }
            return nil
        },
    })
zu0ti5jz

zu0ti5jz1#

以下是您可以遵循的步骤:
1.在没有"bearer"关键字的情况下继续令牌检查:为此,您可以将TokenLookup值从"header:Authorization"更改为"query:token"。这将允许您将令牌作为查询参数而不是在标头中传递。
1.当找不到令牌或令牌无效时,返回一条适合于这种情况的自定义错误消息:为此,可以修改错误处理程序函数
下面是一个例子:

output := echojwt.JWT(&echojwt.Config{
     SigningKey:  []byte(key.EnvSecretKey),
     TokenLookup: "query:token",
     ErrorHandler: func(c echo.Context, err error) error {
         if err == jwt.ErrTokenNotFound {
             return c.JSON(http.StatusBadRequest, "token not found")
         }
         if ve, ok := err.(*jwt.ValidationError); ok {
             if ve.Errors&jwt.ValidationErrorMalformed != 0 {
                 return c.JSON(http.StatusBadRequest, "token is malformed")
             } else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {
                 return c.JSON(http.StatusUnauthorized, "token is expired or not valid yet")
             } else {
                 return c.JSON(http.StatusBadRequest, "token is invalid")
             }
         }
         return nil
     },
 })

相关问题