🎸
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