Content tagged baz

lackのsessionミドルウェアでpostgresqlを使用する際のメモ

posted on 2025-03-18 10:56:32

Caveman2ではapp.lisp内でlackのbuilderを使ってappを生成してそれに対してclackupを動かすという流れになっている。
このbuilderで


 (:session
  :store (make-dbi-store :connector (lambda ()
                                      (apply #'dbi:connect
                                             (your-package-name.db:connection-settings)))))

とするとRDBMSにセッション情報を保存できるようになる。
README.mdのこの箇所にも書かれているが詳細はソース を読まないわからない。
ソースを読めばわかるがfetch-sessionメソッドがwith-db-connectionマクロを使用していて自動的に接続を閉じれるようになっている。
しかし、それはdisconnectorキーワードで閉じる際に使用する関数を指定している場合であり、初期値はnilなのでただ単に上記のようにすると開きっぱなしになってしまう。
なので、下記の様にdisconnectorキーワード使って関数を渡してやる必要がある。

 (:session
  :store (make-dbi-store :connector (lambda ()
                                      (apply #'dbi:connect
                                             (your-package-name.db:connection-settings)))
                         :disconnector #'dbi:disconnect)
  :state (make-cookie-state
          :httponly t
          :cookie-key "session" ;; default value is lack.session
          :samesite :strict
          :secure t
          :expires 1800))

make-cookie-stateの箇所は必要が無いが使い方のメモとして残しておく。  


Unless otherwise credited all material Creative Commons License by madosuki