Gin: currentUserを変数に保存することは可能ですか?

作成日 2018年11月08日  ·  3コメント  ·  ソース: gin-gonic/gin

次の方法でcurrentUserをチェックします

users := router.Group("/users")
    {
        users.Use(checkCurrentUser())
        users.GET("/show", controllers.ShowUser)
    }

正しくチェックしますが、このcurrentUserは、たとえばすべての関連付けを取得するために、ハンドラー内で必要になることがよくあります(関係ありません)。

// ShowUser shows information about user
func ShowUser(c *gin.Context) {
    user := gerCurrentUser(c) // I do additional request to the DB
    c.HTML(200, "showUser", gin.H{
        "currentUser": user,
    })
}

そして、このレコードを取得するには、DBに追加のリクエストを行う必要があります。

currentUserどこかに保存して、ハンドラー内で使用することは可能ですか?

question

最も参考になるコメント

だから私はそれを行う方法を見つけました
関数Set()は私を助けました
私はそれを私に使うことができますcheckCurrentUser()

func checkCurrentUser() gin.HandlerFunc {
    return func(c *gin.Context) {
        session := sessions.Default(c)
        userID := session.Get("userID")
        user := new(models.User)
        configs.DB.First(&user, userID)
        if configs.DB.NewRecord(user) {
            c.Redirect(http.StatusPermanentRedirect, "/login")
        } else {
            c.Set("currentUser", user)
            c.Next()
        }
    }
}

そして今、私はこのインスタンスをで得ることができます

currentUser := c.MustGet("currentUser")

Thx、問題はクローズされる可能性があります!

全てのコメント3件

redisを使用できます

session、jwt、redis..etc ..を使用できます。

だから私はそれを行う方法を見つけました
関数Set()は私を助けました
私はそれを私に使うことができますcheckCurrentUser()

func checkCurrentUser() gin.HandlerFunc {
    return func(c *gin.Context) {
        session := sessions.Default(c)
        userID := session.Get("userID")
        user := new(models.User)
        configs.DB.First(&user, userID)
        if configs.DB.NewRecord(user) {
            c.Redirect(http.StatusPermanentRedirect, "/login")
        } else {
            c.Set("currentUser", user)
            c.Next()
        }
    }
}

そして今、私はこのインスタンスをで得ることができます

currentUser := c.MustGet("currentUser")

Thx、問題はクローズされる可能性があります!

このページは役に立ちましたか?
0 / 5 - 0 評価