Go语言 我们如何在fiber.context自定义中间件中实现声明?

qacovj5a  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(199)

我想设置对fiber.context的声明。但是我在第三行得到了一个错误,即*jwt。令牌为空。我如何才能到达令牌或声明?或者您是否有使用其他任何内容的建议?

func RoleMiddleware() func(*fiber.Ctx) { //change name
        return func(ctx *fiber.Ctx) {
            user := ctx.Locals("user").(*jwt.Token)
            claims := user.Claims.(jwt.MapClaims)
            ctx.Locals("id", int(claims["id"].(float64)))
            ctx.Locals("is_api", claims["is_api"])
            ctx.Locals("is_admin", claims["is_admin"])
            ctx.Locals("is_super_admin", claims["is_super_admin"])
        }
    }

我将在我的user_controller中使用此示例:user_id := ctx.Locals("id").(int)

w46czmvw

w46czmvw1#

您在gofiber recipes repo中有一个完整的JWT示例实现。
链接:https://github.com/gofiber/recipes/tree/master/jwt
简而言之。

product := api.Group("/product")
product.Get("/", handler.GetAllProducts)
product.Get("/:id", handler.GetProduct)
product.Post("/", middleware.Protected(), handler.CreateProduct)
product.Delete("/:id", middleware.Protected(), handler.DeleteProduct)
  • 请确保在每个受保护的路由上使用的筛选器与示例中完全相同:

正确使用middleware.Protected(),因此JWT标记应该在处理程序ctx.Locals中可用

相关问题