Невозможно получить сессию гориллы. Значение по ключу - PullRequest
0 голосов
/ 11 сентября 2018

Проблема в том, что невозможно получить значение из сеанса. Значение в другом файле в том же пакете

В файле controllers.go

func (c *AuthenticationControllers) AdminLogin() http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")

          //AUTHENTICATION

        if answer {
            w.Write([]byte("Successful Authenticated!"))

            //1* Create Session

            session, _ := store.Get(r, "session") //SESSION START

            ///Here I've setted true
            session.Values["authenticated"] = true//Successful Authenticated

            sessionToken, _ := uuid.NewV4() //Generate session token

            session.Values["userid"] = sessionToken.String()

            session.Save(r, w)


            //Redirect
            http.Redirect(w, r, "/admin/application", 302)
        } else {
            //http.Redirect(w, r, "/login", 302)

            http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden)
        }

    }
}

IN файл middleware.go в том же пакете

 func (m *AuthenticationMiddleWares) RequiresLogin(handler http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        session, _ := store.Get(r, "session") //!!!

        if auth, ok := session.Values["authenticated"].(bool); !ok || !auth {
            http.Error(w, "Forbidden", http.StatusForbidden)
            return
        }

        handler(w, r)
    }
}


 session.Values["authenticated"] //has nil value, but has to be true after authentification in order to get you access to the route
router.HandleFunc("/admin/applications", authMiddle.RequiresLogin(authContrl.Application()))

Что я сделал не так? Почему session.Values ​​["authenticated"] возвращает "nil"

1 Ответ

0 голосов
/ 11 сентября 2018

session, _ := store.Get(r, "session") //SESSION START, ваш сеанс зависит от запроса r, который является указателем, который создается пакетом, который вызывает ваш контроллер.Если вы звоните session из другого файла, вам необходимо убедиться, что это тот же запрос, который передается в store.Get().Это может быть причиной.

...