2018-10-23に更新

Phoenixのex_adminでueberauthの認証

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

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

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

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

だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはαバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
関連記事

コメント