JavaScriptを有効にしてください

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

 ·  ☕ 1 分で読めます

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

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

環境

  • Elixir 1.14.2
  • Phoenix 1.6.3

セッション制御

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

Plug module の作成

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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 を設定して特定のアクションではセッションがない場合はアクセスできないようにします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

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

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer