iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Modern Web

使用 Clojure 當個 Full-stack 開發者系列 第 13

[Day 13] 當Framework不再是你的庇護所

  • 分享至 

  • xImage
  •  

今天來將使用者保留~~

這邊就直接存在session,所以我們需要一個session的middleware

反璞歸真~所有的東西就是要自己來XDD(會發現以前很多的東西在底層的framework都已經幫你包好了)

一樣使用到ring的session middleware

這邊就參考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全部都在這裡

但,我們可以繼續細品,因為一些特性的關係,這種寫法不會造成污染

反而會給你一致的開發體驗


上一篇
[Day 12] `->` REPL 的開發體驗
下一篇
[Day 14] 不只是語法,原理才是核心
系列文
使用 Clojure 當個 Full-stack 開發者30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言