请求令牌时获取nil而不是* jwt.Token

时间:2019-07-26 12:15:38

标签: go jwt

我正在尝试使用令牌来验证用户角色,但出现错误:

  

接口转换:接口{}为nil,而不是* jwt.Token

我做了类似的事情来请求用户ID,但它确实起作用,但是在这里我似乎无法获得令牌。

代码:

func AdminRoutes(next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        u := c.Get("user").(*jwt.Token)
        claims := u.Claims.(jwt.MapClaims)
        for _, item := range routes[claims["role"].(string)] {
            if c.Request().RequestURI == item && claims["role"] != "admin" {
                return c.JSON(http.StatusUnauthorized, "Role not suitable for function.")
            }
        }
        return next(c)
    }
}

我尝试过c.Set()令牌,但是c.Get()之后不起作用。

1 个答案:

答案 0 :(得分:0)

c.Get("user")返回nil值,而您所做的是对nil值执行类型声明,这就是发生错误的原因。

我建议对c.Get()进行检查,然后再断言。

if temp := c.Get("user"); temp != nil {
    u := temp.(*jwt.Token)
    claims := u.Claims.(jwt.MapClaims)
    for _, item := range routes[claims["role"].(string)] {
        if c.Request().RequestURI == item && claims["role"] != "admin" {
            return c.JSON(http.StatusUnauthorized, "Role not suitable for function.")
        }
    }
}