今天來將使用者保留~~
這邊就直接存在session,所以我們需要一個session的middleware
反璞歸真~所有的東西就是要自己來XDD(會發現以前很多的東西在底層的framework都已經幫你包好了)
這邊就參考router.clj的session-options/wrap-session
記得,middleware是讀跟寫(request and response)
然後這邊先做一個未來可能會用的library: buddy與他的家族們
這次先使用buddy-sign簽一個有時效性的token,然後存到session
參考login.clj在處來login的部分,將sign過的token存進session
接著我們就可以看到在hello.clj的me_handler將session讀出來,把他放到html的文字裡
這邊再次提一下,
[:h2 {:max-w-screen-lg "" ...}
"User: "
(let [session (jwt/unsign (:session req) "key")
_ (assert session "Session expired.")
user
(db/query1
(sql/format {:select [:*]
:from [:ithome]
:where [:and
[:= [:json_extract :v [:inline (str "$.kind")]] "user"]
[:= [:json_extract :v [:inline (str "$.id")]] (:user session)]]}))]
(:name user))]
這段程式你不用特別的使用template engine提供的語法做取代變數之類的,全部都是clj的程式
你也可以說是回到好久以前的義大利麵式寫法,html/model/db全部都在這裡
但,我們可以繼續細品,因為一些特性的關係,這種寫法不會造成污染
反而會給你一致的開發體驗