次の方法で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
どこかに保存して、ハンドラー内で使用することは可能ですか?
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、問題はクローズされる可能性があります!
最も参考になるコメント
だから私はそれを行う方法を見つけました
関数
Set()
は私を助けました私はそれを私に使うことができます
checkCurrentUser()
そして今、私はこのインスタンスをで得ることができます
Thx、問題はクローズされる可能性があります!