一人もくもく会 α verでサービス開始しました。

Phoenixのex_adminでueberauthの認証

Phoenixでex_adminをueberauthを使って行う。 基本的には

Elixir/Phoenixにおけるueberauth(認証)とex_admin(管理画面)の連携方法 - Qiita

の解説通りでいいのだが、一部情報が古いので現在の対応方法を記載。

current_user_nameはログインしていないとエラーになるので下記のように修正。

  def current_user_name(conn) do
    user = current_user(conn)
    if user do
      user.name
    else
      ''
    end
  end

あと現在はconfigのauthorizeはなくなった。 ExAdmin.Authenticationの書き方と同様にできるようになったので下記をconn.exに追記。 コントローラによって処理を分けたいならAnyの部分を変えれば良い。

defimpl ExAdmin.Authorization, for: Any do
  def authorize_query(_, _, query, _, _), do: query
  def authorize_action(resource, conn, action) do
    App.UserAuth.check_logged_in(conn, action, resource)
  end
end

あとuser_auth.exのcheck_logged_inだが、identityが必要ならつける。

  def check_logged_in(conn, _action, _resource_model) do
    login_url = auth_path(conn, :request, "identity")
    if conn.request_path != login_url && !logged_in?(conn) do
      conn |> redirect(to: login_url)
    end
    true
  end