Почему имя пользователя не сохраняется в сеансе noir в проекте Clojure?
Вот как я могу сохранить это при входе в систему:
(defn set-loggedin [username]
(sesh/put! :username username))
(defn login-handler [username password]
(let [user (datab/login username password)]
(if (empty? user)
(view/login-form "Wrong password.")
(do
(set-loggedin username)
(resp/redirect "/movies")))))
(defroutes app-routes
...
(POST "/" [username password] (login-handler username password))
(POST "/movie/save" [movieID name] (film-new movieID name))
...)
(def app
(noir-middleware/app-handler
[app-routes]
:ring-defaults (assoc-in site-defaults [:security :anti-forgery] false)))
Когда я показываю имя пользователя в форме после входа в систему, он показывает его, но когда я пытаюсь сохранить фильм (в таблице фильмов есть имя пользователя в столбце) и получить имя пользователя, это nil.
(defn film-new [movieID name]
(datab/filmnew movieID name (sesh/get :username))
(resp/redirect "/movies")
)
Я неправильно завершаю сессию? Я не понимаю Я также попытался обернуть это так
def app (sesh/wrap-noir-session*
(noir-middleware/app-handler [app-routes]
:ring-defaults (assoc-in site-defaults [:security :anti-forgery]
false))))
1 ответ
РЕДАКТИРОВАТЬ: libnoir теперь официально устарела. Начните здесь.
Это минимальный пример, показывающий, что сеанс libnoir с сохранением состояния работает из коробки:
(ns ln.core
(:require
[compojure.core :refer [defroutes GET]]
[noir.session :as session]
[noir.util.middleware :as middleware]
[ring.adapter.jetty :refer [run-jetty]]))
(defroutes app-routes
(GET "/foo" []
(session/update-in! [:foo] not)
"Now go to /bar")
(GET "/bar" []
"foo was" (str (session/get :foo))))
(def app
(middleware/app-handler
[app-routes]))
(defonce server (atom nil))
(defn stop-server []
(when-let [s @server]
(.stop s)))
(defn dev []
(stop-server)
(reset! server (run-jetty app {:port 8888
:join? false})))
;;;; Scratch
(comment
(dev)
)
Если бы вы могли предоставить минимальное воспроизведение, чтобы показать, что ваш код НЕ работает должным образом, мы могли бы помочь вам в дальнейшем. Сказав это, libnoir выглядит немного заброшенным для меня. Возможно, вам лучше начать с ванильного кольца.