Как получить Cookie MaxAge в Gin Golang?

У меня проблема с реализацией куки. Я создаю куки с помощью SetCookie() в контроллере. Когда пользователь использует адрес /, срабатывает middleware. В этом middleware я получаю куки из запроса пользователя с помощью функции Request.Cookie("session_id"). Я получаю значение этого куки, но не получаю другие поля, такие как MaxAge , Path и так далее.

controller.go

func (a *AuthorizedController) SignIn(c *gin.Context) {
    c.SetCookie("session_id", uuid, 600, "/", "localhost", false, true)
    c.Status(http.StatusOK)
}

middleware.go

func SessionMiddleware(repo *repostirories.Repositories) gin.HandlerFunc {
    return func(c *gin.Context) {
        cookie, err := c.Request.Cookie("session_id")
        if err != nil || cookie.Value == "" {
            c.Status(http.StatusUnauthorized)
            c.Abort()
            return
        }
        log.Println(cookie.MaxAge)
    }
}

app.go

r.POST("/signin", controller.SignIn)
r.GET("/", middlewares.SessionMiddleware(repo), controller.Home)

log.Println(cookie.MaxAge) всегда выводит 0.


Ответы (1 шт):

Автор решения: Collapse

С Gin не работал, но сталкивался с подобным в gorilla, там проблема было в том, что Request.Cookie("session_id") получает только значение куки, но не все остальное, решением было использовать cookies := c.Request.Cookies() , потом проходимся по cookies и берем что нам нужно:

    for _, cookie := range cookies {
                if cookie.Name == "session_id" {
                    sessionID = cookie.Value
                    log.Println("MaxAge:", cookie.MaxAge)
                    log.Println("Path:", cookie.Path)
                    break
                }
     }

Возможно в Gin нужно делать так же

→ Ссылка