我正在尝试使用令牌来验证用户角色,但出现错误:
接口转换:接口{}为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()
之后不起作用。
答案 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.")
}
}
}