在 clojure Ring 中传递会话状态
passing session state in clojure Ring
我正在为我的网站使用无密码登录系统,用户收到一封电子邮件并单击 link 进行身份验证。到目前为止,一切都很好。
如何创建或修改环中间件以保留和传递更新的 :session 值?
(GET "/login" []
; gets a user's email and sends them a link to authenticate.
)
(GET "/login/:key&:email&:timestamp" [key email timestamp :as request]
; uses the timestamp, key, and email to verify the key
; if it all checks out, then set some session values
; e.g.
(def updatedRequestMap
(assoc-in request [:session :supa-secret-smoken-token] "supercool secretval")))
我如何确保将 updatedRequestMap 传递给未来的请求?
谢谢 (=
您的 login
处理程序创建一个响铃响应并将新更新的会话关联到该响铃响应中。
;; put this in your ns declaration
;; (:require [ring.util.response :refer [response]])
(GET "/login/:key&:email&:timestamp" [key email timestamp :as request]
(let [old-session (:session request)
new-session (assoc old-session
:supa-secret-smoken-token
"supercool secretval")]
(-> (response "You are now logged in")
(assoc :session new-session))))
我的建议是看看
ring-defaults 图书馆。它会添加
一些对您的应用程序非常有用的中间件,包括对会话的支持和
cookie 以及一些有用的安全默认设置。它添加的是标准环
中间件组件,因此您还应该检查各个中间件
组件文档以了解它如何帮助您更轻松地编写处理程序
我正在为我的网站使用无密码登录系统,用户收到一封电子邮件并单击 link 进行身份验证。到目前为止,一切都很好。
如何创建或修改环中间件以保留和传递更新的 :session 值?
(GET "/login" []
; gets a user's email and sends them a link to authenticate.
)
(GET "/login/:key&:email&:timestamp" [key email timestamp :as request]
; uses the timestamp, key, and email to verify the key
; if it all checks out, then set some session values
; e.g.
(def updatedRequestMap
(assoc-in request [:session :supa-secret-smoken-token] "supercool secretval")))
我如何确保将 updatedRequestMap 传递给未来的请求?
谢谢 (=
您的 login
处理程序创建一个响铃响应并将新更新的会话关联到该响铃响应中。
;; put this in your ns declaration ;; (:require [ring.util.response :refer [response]]) (GET "/login/:key&:email&:timestamp" [key email timestamp :as request] (let [old-session (:session request) new-session (assoc old-session :supa-secret-smoken-token "supercool secretval")] (-> (response "You are now logged in") (assoc :session new-session))))
我的建议是看看 ring-defaults 图书馆。它会添加 一些对您的应用程序非常有用的中间件,包括对会话的支持和 cookie 以及一些有用的安全默认设置。它添加的是标准环 中间件组件,因此您还应该检查各个中间件 组件文档以了解它如何帮助您更轻松地编写处理程序