【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
|
これで特定のセッションがないとリダイレクトされます。
参考