Phoenixでadminルーティングしてそこだけ認証を入れる。
mix phoenix.gen.model
でモデルだけ先に作る。もちろんgen.htmlでルーティングのない箇所のCRUDと一緒にモデルを作ってもいい。
下記でadmin向けページを作成できる。
mix phoenix.gen.html Admin.Article articles --no-model title:string ....
これでコントローラやテンプレートも全部adminフォルダに分けて作ってくれる。
モデルのaliasにAdminが含まれているのでそこだけ削除。
認証されていない場合にログイン画面へリダイレクトする。まず下記のようなPlugを作る。
(下記のようにAuthモジュールを作るなり直接セッションで見るなりする)
defmodule App.Plug.Prefix do
import Plug.Conn
alias App.Auth
def init(default), do: default
def call(conn, params) do
[prefix] = params
if !Auth.get_user(conn, prefix) do
Phoenix.Controller.redirect(conn, to: "/admins/login")
|> halt
end
conn
end
end
(調べたらどこもhaltしてたんだけどほんとにこれでいいんだろうか)
ルーティングで先程のPlugを導入。pipelineで実装。ついでにレイアウトはadmin.html.eexを使用するようにもしておく。
pipeline :admin do
plug :put_layout, {App.LayoutView, :admin}
plug App.Plug.Prefix, [:admin]
end
URLのルーティング。pipelineは複数設定できるらしい。
scope "/admin", App, as: :admin do
pipe_through [:browser, :admin]
get "/admins/logout", Admin.AdminController, :logout
resources "/admins", Admin.AdminController
end
これで管理画面側の処理を別に出来た。通常のユーザーのマイページなども同様にしてatomを変えるだけで実装できる。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント