🎸
iron-session の動作の仕組みをシーケンス図で表してみる
iron-session
はCookieを使ってSessionの仕組みを実現するライブラリです。
Next.js の公式ドキュメントで認証に関するライブラリとして、next-auth
と一緒に紹介されています。
next-auth は機能が充実してますが、想定している用途に対してオーバースペックであったため iron-session
を導入することにしました。
iron-session のシーケンス図
CookieをSessionストアとして利用する仕組み自体はRailsでもなじみのある方法で、動作原理自体は理解しているつもりですが、iron-session
のAPIがどのように対応しているか理解があいまいだったので、example のコードをベースにシーケンス図を書き起こしてみました。
わかったこと
上記の図を描きながらExampleを動作させてみてわかったこと
- Session 情報のセットは API Route または SSR ページなどの Server-side でのみ行われる
- Session 情報を扱うための API として以下が用意されている
-
withIronSessionApiRoute
- API handler のラッパー関数
- API handler が受け取る Request オブジェクトに Session 情報が追加されている
-
req.session.{任意のKey}
でセッションの読み書きができる
-
withIronSessionSsr
- 上記の SSR ページ対応版
- この関数の戻り値を
getServerSideProps
関数としてexportする
-
-
req.session.save()
でセッション情報がCookieに暗号化された状態でセットされる- レスポンスの
Set-Cookie
ヘッダのSession情報に相当するKeyに値がセットされる
- レスポンスの
-
req.session.destroy()
でセッション情報が破棄される- レスポンスの
Set-Cookie
ヘッダのSession情報に相当するKeyに空の値がセットされ、maxage=0
の状態でブラウザに返ってくる
- レスポンスの
まとめ
図を描くと頭が整理されてよい。また、時間が経ってもある程度思い出しやすい気がする。
Discussion