【发布时间】:2014-11-25 09:01:20
【问题描述】:
我很难理解如何在 Compojure/Ring 中正确使用会话。
我遇到的一些例子:
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 返回 hiccup/html,并且我相信在完全评估路由之前不会添加环响应映射。这似乎是上述所有示例都显示会话被添加到完整响应图中的原因。但是,Compojure 的功能之一是抽象出开发必须使用响应图的要求。因此,我觉得我必须错过一些东西。
执行上述操作的正确方法是什么?
【问题讨论】:
-
compojure 是一个路由库。它抽象了手动决定哪些代码应该处理请求的需要,并且对于从处理函数的请求中获取参数有一些便利。它并没有完全抽象出请求映射的所有用法。