リモートで働くプログラマーの検索結果

リモ太がググったことの覚書

既にdeviseを使っている時に管理者用の別モデルを作成して管理画面のログイン機能を作成する

github.com

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

以上で、管理者用のモデルを作成しログイン機能が作成出来たと思う