Copy & Paste Engineer

【Elixir】ログイン制御 セッションでアクセス制限を実現する

【Elixir】ログイン制御 セッションでアクセス制限を実現する

Elixir でログイン制御 セッションでアクセス制限を実現する

環境

セッション制御

特定のセッション(ログインなど)がない場合にアクセスが出来ないようにします。

Plug module の作成

まずはセッションの制御を行うミドルウェアを作成 Plug — Phoenix v1.6.3

defmodule DemoWeb.AuthPlug do
  import Plug.Conn, only: [get_session: 2, halt: 1]
  import Phoenix.Controller, only: [put_flash: 3, redirect: 2]

  def init(opts), do: opts

  def call(conn, _opts) do
    # :user のセッションない場合は "/" にリダイレクト
    case get_session(conn, :user) do
      nil ->
        conn
        |> put_flash(:error, "ログインしてください。")
        |> redirect(to: "/")
        |> halt()
      _ -> conn
    end
  end
end

コントローラーに実装

コントローラーに AuthPlug を設定して特定のアクションではセッションがない場合はアクセスできないようにします。

defmodule DemoWeb.SampleController do
  use DemoWeb, :controller

  # アクセス制御を行う action を指定 [:index]
  plug DemoWeb.AuthPlug when action in [:index]

  def index(conn, _params) do
    render(conn, "index.html")
  end
end

これで特定のセッションがないとリダイレクトされます。

参考