我尝试访问环中间件中的基本会话数据,在我的情况下,将用户数据复制到请求中以便于访问。
(def app
(->
(handler/site app-routes)
(wrap-user-auth) ; <--- my middleware
(session/wrap-session {:store (cookie-store {:key "something super secret"})})))
中间件:
(defn wrap-user-auth [handler]
(fn [request]
(println request )
(let [user (get (request :session) :user nil)]
(let [response
(handler
(if-not (nil? user)
(assoc request :user user :is_authenticated? true)
(assoc request :user nil :is_authenticated? false)))]
response
))))
打印请求时,会话数据始终为空,即使已设置并可通过视图访问。我尝试搞乱中间件订单,但无法弄清楚为什么原子是空的。
会话数据可用的随机路线
(ANY "/foo" request (println (request :session)))
答案 0 :(得分:1)
找到解决方案。
原来这个问题与Compojure/Ring: Why doesn't a session with cookie-store survive a server restart?“有点”相关,这解释了正在使用2个会话中间件:一个是compojure,一个是wrap-session
。将两个中间件更改为相同的存储引擎后,原子充满了我的会话数据 - 虽然我不太明白为什么。
我将此作为答案而不是评论,因为它解决了实际问题。很高兴听到为什么会发生这种情况!