diff --git a/modules/reitit-middleware/src/reitit/ring/middleware/session.clj b/modules/reitit-middleware/src/reitit/ring/middleware/session.clj index e0300204..ea3a0cf0 100644 --- a/modules/reitit-middleware/src/reitit/ring/middleware/session.clj +++ b/modules/reitit-middleware/src/reitit/ring/middleware/session.clj @@ -31,9 +31,10 @@ | key | description | | -------------|-------------| - | `:session` | A map of options that passes into the [`ring.middleware.session/wrap-session](http://ring-clojure.github.io/ring/ring.middleware.session.html#var-wrap-session) function`." + | `:session` | A map of options that passes into the [`ring.middleware.session/wrap-session](http://ring-clojure.github.io/ring/ring.middleware.session.html#var-wrap-session) function`, or an empty map for the default options. The absence of this value will disable the middleware." {:name :session :spec ::spec :compile (fn [{session-opts :session} _] - (let [session-opts (merge {:store store} session-opts)] - {:wrap #(session/wrap-session % session-opts)}))}) + (if session-opts + (let [session-opts (merge {:store store} session-opts)] + {:wrap #(session/wrap-session % session-opts)})))}) diff --git a/test/clj/reitit/ring/middleware/session_test.clj b/test/clj/reitit/ring/middleware/session_test.clj index efaf41f7..5006d57c 100644 --- a/test/clj/reitit/ring/middleware/session_test.clj +++ b/test/clj/reitit/ring/middleware/session_test.clj @@ -11,11 +11,11 @@ [request] (let [pattern #"ring-session=([-\w]+);Path=/;HttpOnly" parse-fn (partial re-find pattern)] - (-> request - (get-in [:headers "Set-Cookie"]) - first - parse-fn - second))) + (some-> request + (get-in [:headers "Set-Cookie"]) + first + parse-fn + second))) (defn handler "The handler that increments the counter." @@ -52,7 +52,8 @@ (let [app (ring/ring-handler (ring/router ["/api" - {:middleware [session/session-middleware]} + {:middleware [session/session-middleware] + :session {}} ["/ping" handler] ["/pong" handler]])) first-response (app {:request-method :get @@ -65,6 +66,18 @@ (is (= (inc (get-in first-response [:body :counter])) (get-in second-response [:body :counter]))))))) +(deftest default-session-off-test + (testing "Default session middleware" + (let [app (ring/ring-handler + (ring/router + ["/api" + {:middleware [session/session-middleware]} + ["/ping" handler]])) + resp (app {:request-method :get + :uri "/api/ping"})] + (testing "off by default" + (is (nil? (get-session-id resp))))))) + (deftest session-spec-test (testing "Session spec" (testing "with invalid session store type"