登录
首页 >  Golang >  Go问答

Gin 中间件不保留上下文变量

来源:stackoverflow

时间:2024-02-06 09:21:22 233浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《Gin 中间件不保留上下文变量》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我试图通过使用从 gin 上下文获取的用户 id 从数据库中获取用户的任务来获取用户的任务。问题出在 getalluserstasks 中,其中 usercontext 为 。在登录时,用户从上下文中获取所有信息。 我在这里缺少什么?

user.go

func loggedin(c *gin.context) {
    _, ok := c.get("user")
    if ok != true {
        c.status(http.statusunauthorized)
        return
    }
    c.status(http.statusok)
}

func authenticate(c *gin.context) {
    cookiestring, err := c.cookie("jwt")
    if err != nil {
        log.println(err.error())
        return
    }

    user, err := getuserfromtoken(cookiestring)
    if err != nil {
        log.println(err.error())
        return
    }
    c.set("user", *user)
}

func registerroutes(router *gin.engine) {

    //routes.get("/:id", getuserbyid)
    //routes.delete("/:id", deleteuserbyid)

    routes := router.group("/user")
    routes.post("/login", loginuser)
    routes.post("", createuser)

    routes.use(authenticate)
    routes.get("/logout", logoutuser)
    routes.get("/logged_in", loggedin)
}

task.go

func GetAllUsersTasks(c *gin.Context) {
    userContext, ok := c.Get("user")
    if ok != true {
        c.Status(http.StatusUnauthorized)
    }
    u, ok := userContext.(db.User)
    if ok != true {
        c.Status(http.StatusUnauthorized)
    }

    allTasks, err := database.GetAllTasksByOwnerId(u.Id)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"GetAllTasksByOwnerId": err.Error()})
        return
    }
    c.JSON(http.StatusOK, allTasks)
}

func RegisterRoutes(router *gin.Engine) {
    routes := router.Group("/task")

    routes.Use(user.Authenticate)
    routes.GET("/all", GetAllUsersTasks)
}

正确答案


事实证明代码是正确的,我只是忘记在前端的获取请求中包含凭据标头..

终于介绍完啦!小伙伴们,这篇关于《Gin 中间件不保留上下文变量》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>