【问题标题】:Accessing session data in ring middleware在环中间件中访问会话数据
【发布时间】:2015-02-07 02:23:57
【问题描述】:

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

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

【问题讨论】:

    标签: clojure ring compojure


    【解决方案1】:

    找到了解决办法。

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2022-01-06
      • 1970-01-01
      • 2021-07-26
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多