結論
LiveView モジュールの mount/3
関数の第二引数に "user_token"
が設定されているので、phx_gen_auth が生成するモジュールに含まれる関数 get_user_by_session_token/1
を利用してユーザデータを取得する。
実例
アプリケーションを用意する
$ mix phx.new my_app --live $ cd my_app
phx_gen_auth を追加する
mix.exs
の deps
に phx_gen_auth
を追加する。
このパッケージは開発時のみ利用し、また実行時には利用しないので only: :dev
および runtime: false
を指定する。
{:phx_gen_auth, "~> 0.4", only: :dev, runtime: false}
パッケージを取得しコンパイルする。
$ mix do deps.get, deps.compile
認証の仕組みを用意する
mix task の mix phx.gen.auth
が有効になるので、これを利用して認証のリソースとコードを生成する。
$ mix phx.gen.auth Account User users $ mix do deps.get, ecto.create, ecto.migrate
認証が必要な LiveView を追加する
lib/my_app_web/router.ex
を編集して :require_authenticated_user
が指定されているスコープに LiveView のルーティングを追加する。
scope "/", MyAppWeb do pipe_through [:browser, :require_authenticated_user] live "/user", UserLive # ... end
lib/my_app_web/live/user_live.ex
を作成して LiveView のモジュール MyAppWeb.UserLiveView
を記述する。
このとき、mount/3
の第二引数のマップに、ログインしたユーザを識別するトークン "user_token"
が設定されているので、mix phx.gen.auth
で生成された MyApp.Account.get_user_by_session_token/1
を使ってそのユーザを取得する。
defmodule MyAppWeb.UserLive do use MyAppWeb, :live_view def mount(_params, session, socket) do current_user = MyApp.Account.get_user_by_session_token(session["user_token"]) {:ok, assign(socket, current_user: current_user)} end def render(assigns) do ~L""" <h1><%= @current_user.email %></h1> """ end end
サーバを起動し動作を確認する
サーバを起動し、追加した LiveView の URL http://localhost:4000/user
にアクセスする。
$ iex -S mix phx.server
認証されていないのでログインページに移動する。
Register
リンクをクリックし登録ページに移動する。
ユーザ登録が完了すると、LiveView のページが表示され、登録したメールアドレスが表示される。
いつか読むはずっと読まない:銃・病原菌・鉄
数年前に購入したままになっていた本。 たまたま先日見た番組に著者が出演していて、存在を思い出し読み始めたところ。
今、この時に、読むのが、よい気がしている。
文庫 銃・病原菌・鉄 (上) 1万3000年にわたる人類史の謎 (草思社文庫)
- 作者:ジャレド・ダイアモンド
- 発売日: 2012/02/02
- メディア: 文庫
文庫 銃・病原菌・鉄 (下) 1万3000年にわたる人類史の謎 (草思社文庫)
- 作者:ジャレド・ダイアモンド
- 発売日: 2012/02/02
- メディア: 文庫