はじめに
deviseでユーザーログイン機能を追加するにあたって、普段よく使っているものの備忘録です。
rootをログイン画面に設定
deviseのcontrollerを作成し、routes.rb
で以下のように設定。
$ rails g devise:controllers users
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
で以下を記載。
class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
tasks_path
end
このようにログイン後最初のページを条件分岐させることも可能です↓
class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
if admin_user?
users_path
else
tasks_path
end
end
ストロングパラメーターのpermit
deviseではサインアップ時にemail
とpassword
系のみを受け取るようにストロングパラメーターが設けられている。
それ以外の :name
などを許可したい場合、permitを設ける必要がある↓
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に適用
例えば、creator
と client
という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
おわり
他にも備忘録しておきたい事ありそうなので、思い出し次第追加したい。