Почему имя пользователя не сохраняется в сеансе noir в проекте Clojure? - PullRequest
0 голосов
/ 14 сентября 2018

Вот как я могу сохранить его при входе в систему:

(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 Ответ

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

EDIT: 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 выглядит немного заброшенным для меня. Возможно, вам лучше начать с ванили Ring .

...