【Rails】コピペで使えるdevise備忘録


はじめに

deviseでユーザーログイン機能を追加するにあたって、普段よく使っているものの備忘録です。

rootをログイン画面に設定

deviseのcontrollerを作成し、routes.rbで以下のように設定。

$ rails g devise:controllers users
routes.rb
Rails.application.routes.draw do

   # rootをログイン画面に設定
  devise_scope :user do
    root "users/sessions#new"
  end

  devise_for :users, :controllers => {
    sessions: 'users/sessions'
  }

ログイン後のpathを指定

application_controller.rbで以下を記載。

application_controller.rb
class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    tasks_path
  end

このようにログイン後最初のページを条件分岐させることも可能です↓

application_controller.rb
class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    if admin_user?
      users_path
    else
      tasks_path
    end
  end

ストロングパラメーターのpermit

deviseではサインアップ時にemailpassword系のみを受け取るようにストロングパラメーターが設けられている。
それ以外の :name などを許可したい場合、permitを設ける必要がある↓

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

.
.
.


  private

  def configure_permitted_parameters
    added_attrs = [ :name,
                    :email,
                    :password,
                    :password_confirmation,
                  ]
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs
    devise_parameter_sanitizer.permit :sign_in, keys: added_attrs
  end

複数のモデルをdeviseに適用

例えば、creatorclientという2種類のModelでdeviseによるログイン機能を適用させたい場合、

rails g devise creator
rails g devise client

してあげてmigration

rails db:migrate

するだけでOK.

ヘルパーメソッド

そしてdeviseが提供しているヘルパーメソッドに関しては、userという文字列をそれぞれcreatorやclientに変更すれば利用できる。
(↓こんな感じ)

user creator client
before_action :authenticate_user! before_action :authenticate_creator! before_action :authenticate_client!
user_signed_in? creator_signed_in? client_signed_in?
current_user current_creator current_client
user_session creator_session client_session

詳細はこちらを参照→https://github.com/plataformatec/devise/wiki/How-to-Setup-Multiple-Devise-User-Models
https://qiita.com/tobita0000/items/866de191635e6d74e392

おわり

他にも備忘録しておきたい事ありそうなので、思い出し次第追加したい。