【Elixir】Phoenixでカスタムセッションストアを作る
Elixir Phoenixで自作のセッションストアを作る方法についてやっていきます。
今回はセッション情報を各セッションID名のJSONに保存するというセッションストアを作っていきます。
環境
- Elixir 1.14.2
- Phoenix 1.6.3
必要な依存関係の解決
最初に、このチュートリアルで必要な依存関係を追加しましょう。
この例では、JSONのエンコードおよびデコードを行うためのライブラリとしてjasonを使用します。
以下のようにmix.exsファイルに依存関係を追加します。
| |
その後、以下のコマンドを実行して依存関係を取得します。
| |
なぜ、セッションストアを自作するのか
通常、PhoenixではCookieやETSなど既存のセッションストアを使用しますが、場合によっては独自のストレージメカニズムを必要とすることもあります。
今回はそのようなケースに対応するため、Plug.Session.Store の実装を使用してカスタムセッションストアを作ります。
なお、今回はサンプルのためセッションデータはローカルのJSONファイルとして保存します。
Plug.Session.Storeとは
Plug.Session.Store は Plug.Session が使用するストレージのインターフェイスです。以下の3つの関数を実装する必要があります。
get/2: セッションデータを取得します。(Plug.Session.Store.get/2)put/4: 新規または既存のセッションデータを保存します。(Plug.Session.Store.put/4)delete/2: セッションデータを削除します。(Plug.Session.Store.delete/2)
自作のセッションストアを作成する
では、実際にMySessionStoreというモジュールを作成します。
これはPlug.Session.Storeのbehaviourを実装します。
ここでは、セッションデータが保存されるディレクトリのパスを定数として定義します。
| |
自作のセッションストアを有効にする
これまで作成した自作のセッションストアを有効にするためには、Phoenixのエンドポイント設定を更新する必要があります。
具体的には、lib/your_app_web/endpoint.ex ファイル内の plug Plug.Session の行を次のように書き換えます。
| |
ここで、store: には自作のセッションストアモジュール名を指定します。
また、key: と signing_salt: はセッションデータの署名に使用されるため、それぞれ適切な値を設定してください。
まとめ
以上で、Phoenixで自作のセッションストアを作る方法について説明しました。この例では、シンプルなJSONファイルにデータを
保存していますが、要件に応じてMySQLやPostgreSQLなどのデータベースに保存することも可能です。
ただし、実際の運用においては、セッションデータを平文でファイルに保存することは、パフォーマンスとセキュリティの観点から適切ではないかもしれません。
この記事は主に教育的な目的のためのもので、実際のプロジェクトでは適切なセキュリティ対策を講じることが重要です。