🎸

iron-session の動作の仕組みをシーケンス図で表してみる

2023/11/11に公開

iron-session はCookieを使ってSessionの仕組みを実現するライブラリです。
Next.js の公式ドキュメントで認証に関するライブラリとして、next-auth と一緒に紹介されています。

https://nextjs.org/docs/pages/building-your-application/routing/authenticating

https://github.com/vvo/iron-session

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