访问环中间件中的会话数据

时间:2014-12-09 08:53:59

标签: clojure ring compojure

我尝试访问环中间件中的基本会话数据,在我的情况下,将用户数据复制到请求中以便于访问。

(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)))

1 个答案:

答案 0 :(得分:1)

找到解决方案。

原来这个问题与Compojure/Ring: Why doesn't a session with cookie-store survive a server restart?“有点”相关,这解释了正在使用2个会话中间件:一个是compojure,一个是wrap-session。将两个中间件更改为相同的存储引擎后,原子充满了我的会话数据 - 虽然我不太明白为什么。

我将此作为答案而不是评论,因为它解决了实际问题。很高兴听到为什么会发生这种情况!