Я борюсь с пониманием того, как правильно использовать сеансы в Compojure/Ring.Сессии в Ring/Compojure
Некоторые из примеров, которые я наткнулась:
http://rjevans.net/post/2628238502/session-support-in-compojure-ring
https://github.com/ring-clojure/ring/wiki/Sessions
Эти примеры не помогают мне понять, как интегрировать сессии в нечто вроде механизма авторизации.
(defroutes main-routes
(POST "/login" request (views/login request)))
;; views.clj
(defn login
[request]
(let [{params :params} request
{username :username} params
{password :password} params
{session :session} request]
(if (db/valid-user? username password)
(-> (logged-in request)
(assoc-in [:session :username] username))
(not-logged-in))))
Я понимаю, что это не правильно, как logged-in
возвращает икать/html, и я считаю, что карта ответа кольца не не добавляется, пока после того, как маршрут будет полностью оценен. Похоже, что все приведенные выше примеры показывают, что сеансы добавляются к полной карте ответа. Но одна из особенностей Compojure для начала заключалась в том, чтобы отвлечься от потребности разработки, которая должна работать с картой ответа. Поэтому я чувствую, что мне что-то недоставало.
Каким будет правильный способ сделать это?
compojure - это библиотека маршрутизации. Он абстрагируется от необходимости вручную решить, какой код должен обрабатывать запрос, и имеет некоторые удобства для получения параметров из запроса для функции обработчика. Он не полностью абстрагирует все использование карты запросов. – noisesmith