【问题标题】:Getting nil instead of *jwt.Token when requesting token请求令牌时获取 nil 而不是 *jwt.Token
【发布时间】:2019-07-26 21:01:41
【问题描述】:

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

接口转换:接口{}为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() 之后不起作用。

【问题讨论】:

标签: go jwt


【解决方案1】:

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.")
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2022-01-13
    • 1970-01-01
    • 2021-01-21
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多