【问题标题】:Change cookie attributes according to the request params根据请求参数更改cookie属性
【发布时间】:2016-06-12 18:24:04
【问题描述】:

我正在创建一个带有多个中间件的代理服务器,其中一个是 ring 'wrap-session'。 我希望能够根据请求参数动态更改“包装会话”获取的 cookie 属性(最大年龄)。 这是代理创建:

(defn- make-server
  [port service-spec auth-app backend-bouncer]
  (let [backend (session-backend {})
        proxy-handler         (make-proxy-handler service-spec auth-app backend-bouncer)
        bam-auth-handler      (buddy.auth.middleware/wrap-authentication proxy-handler backend)
        wrap-session-handler  (wrap-session bam-auth-handler {:cookie-name "myCookie" :cookie-attrs {:max-age 3600}})]
    (jetty/run-jetty wrap-session-handler {:port (or port 3000)})))

我该怎么做?

【问题讨论】:

标签: session cookies clojure middleware ring


【解决方案1】:

显然没有别的办法,只能重写wrap-session和另一个并将私有方法session-options复制到我的文件并调用它local-session-option,这就是我的做法:

(defn- local-session-options
  [options cookie-store]
  {:store        (options :store cookie-store)
   :cookie-name  (options :cookie-name "ring-session")
   :cookie-attrs (merge {:path "/"
                         :http-only true}
                        (options :cookie-attrs)
                        (if-let [root (options :root)]
                          {:path root}))})



(defn local-wrap-session
  [handler]
  (let [store (mem/memory-store)]
    (fn [request]
        (let [cookie-max_age (get-max-age request) ; add additional setting and calculation here
              options (local-session-options {:cookie-name "name" :cookie-attrs {:max-age cookie-max_age}} store)
              new-request (rms/session-request request options)]
          (-> (handler new-request)
              (rms/session-response new-request options))))))

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2014-10-25
    • 2019-04-28
    • 2018-12-27
    • 2016-03-30
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多