既にdeviseを使っている時に管理者用の別モデルを作成して管理画面のログイン機能を作成する
Rails用の認証用のgem devise 複数モデルを使ってユーザー用と管理者用に別々にログイン画面を作成する
以降は、既にUserというモデルでユーザー側は作成している前提です
管理者用のモデルを作成
rails generate devise Administrator rake db:migrate
管理画面用のページを作成
やり方は色々あるとは思うけどよくやるのは管理者用にapp/controllers配下にadminsディレクトリを作成 その中に管理画面用のbase controllerを作成しそこで管理者の認証を挟む
app/controllers/admins/admins_controller.rbを作成
# app/controllers/admins/admins_controller.rb class Admins::AdminsController < ApplicationController skip_before_action :authenticate_user! before_action :authenticate_administrator! layout 'admins' # 管理画面用にlayoutファイルを分ける end
app/controllers/admins/sessions_controller.rbを作成
# app/controllers/admins/sessions_controller.rb class Admins::SessionsController < Devise::SessionsController skip_before_action :authenticate_user! layout 'admins' def after_sign_out_path_for(resource) new_administrator_session_path end def after_sign_in_path_for(resource) admins_root_path end end
app/controllers/admins/home_controller.rbを管理画面トップ用に作成
# app/controllers/admins/home_controller.rb class Admins::HomeController < Admins::AdminsController def index end end
app/views/layouts/admins.html.haml等のviewは各プロジェクトによって様々なので割愛 基本的にはapplication.html.hamlをコピペしてログイン周りのリンクを変更するくらいでとりあえずよいかと 必要があれば、app/views/admins/sessions/new.html.hamlも作成する これも基本的にuserで利用しているのがあればそれをコピペでよいのではないかと
app/views/admins/home/index.html.hamlはファイルだけとりあえず作成しておく
管理画面用にroutes.rbを設定する
Rails.application.routes.draw do # 管理画面 devise_for :administrators, only: [:sign_in, :sign_out, :session], controllers: { sessions: 'admins/sessions' } # 変更 namespace :admins do root to: 'home#index' end # ユーザー画面 devise_for :users root 'home#index' end
管理画面ではログイン機能だけ利用するように自動で追記されたdeviseのルーティングを変更する 管理者登録等はconsoleやseedで作成する
deviseの設定を変更する
# config/initializers/devise.rb config.scoped_views = true
以上で、管理者用のモデルを作成しログイン機能が作成出来たと思う