- 更新日: 2016年11月22日
- Devise
Rails で Devise のコントローラーをカスタマイズ
Devise でコントローラーをカスタマイズする場合、認証用ユーザーのモデルが User であれば、app/controllers/users ディレクトリ以下に以下のファイルを作成します。
app/controllers/users/sessions_controller.rb
app/controllers/users/registrations_controller.rb
app/controllers/users/passwords_controller.rb
— 環境 —
rails 5.0.0.1
devise 4.2.0
Devise コントローラーを継承してカスタマイズ
カスタマイズするには、Devise::SessionsController, Devise::RegistrationsController, Devise::PasswordsController を継承したクラスを作成して、各メソッドをオーバーライドする。オーバーライドするメソッドは、ルーティングを確認すると分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ bundle exec rake routes Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PATCH /users/password(.:format) devise/passwords#update PUT /users/password(.:format) devise/passwords#update cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel user_registration POST /users(.:format) devise/registrations#create new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit PATCH /users(.:format) devise/registrations#update PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy root GET / home#index |
コントローラーを作成。
app/controllers/users/sessions_controller.rb
new, create, destroy をオーバーライド。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Users::SessionsController < Devise::SessionsController def new super end def create super end def destroy super end end |
app/controllers/users/registrations_controller.rb
cancel, create, new, edit, update, destroy をオーバーライド。
1 2 |
class Users::RegistrationsController < Devise::RegistrationsController end |
app/controllers/users/passwords_controller.rb
create, new, edit, update をオーバーライド。
1 2 |
class Users::PasswordsController < Devise::PasswordsController end |
将来のカスタマイズのためにも、このように Devise コントローラーを継承して、カスタマイズ用コントローラーを作成しておいたほうが良いかもです。
ルーティング設定
続いて、ルーティングを設定します。
config/routes.rb
1 2 3 4 5 |
devise_for :users, :controllers => { :sessions => "users/sessions", :registrations => "users/registrations", :passwords => "users/passwords" } |
ルーティングを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ bundle exec rake routes Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) users/sessions#new user_session POST /users/sign_in(.:format) users/sessions#create destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy user_password POST /users/password(.:format) users/passwords#create new_user_password GET /users/password/new(.:format) users/passwords#new edit_user_password GET /users/password/edit(.:format) users/passwords#edit PATCH /users/password(.:format) users/passwords#update PUT /users/password(.:format) users/passwords#update cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel user_registration POST /users(.:format) users/registrations#create new_user_registration GET /users/sign_up(.:format) users/registrations#new edit_user_registration GET /users/edit(.:format) users/registrations#edit PATCH /users(.:format) users/registrations#update PUT /users(.:format) users/registrations#update DELETE /users(.:format) users/registrations#destroy root GET / home#index |
Controller#Action が devise/.. から users/.. に変更されて、ルーティングが少しすっきりしました。
自力でテスト用にルーティングを書いてみたらURLヘルパーメソッドが動かなかったりしたので、やはり Devise でのルーティングには、devise_for メソッドを使う必要がある模様(ミスってる可能性ありますけど)。
Devise で devise_for メソッドによるルーティングを確認 | EasyRamble
ということで、これ以上ルーティングについて深追いはせずに、カスタマイズ用のコントローラーを継承して以下のルーティングで進めようと思います。
1 2 3 4 5 |
devise_for :users, :controllers => { :sessions => "users/sessions", :registrations => "users/registrations", :passwords => "users/passwords" } |
- – 参考リンク –
- Devise コントローラーのカスタマイズ
- Ruby on Rails Ver.3.2.0 DeviseのControllerをカスタマイズしたときにRSpecを書いてつまずいた記録 | DYO.JP ver.2
- Rails – Deviseのコントローラをカスタマイズする方法 | 田村倉庫
- Devise ルーティングのカスタマイズ
- 【Rails(3.2系)開発】deviseを利用して認証処理を作ってみる(機能絞り込み):ゆでだこカンタービレ:So-netブログ
- Devise の関連記事
- RailsのDevise認証機能での実装チェックリストまとめ
- Deviseで送信されるメールのfrom(送信者メールアドレス)を変更
- Facebook の OAuth 認証で OAuthException(191)エラー
- Rails Devise でパスワードリセットなどのメールテンプレート(Mailer ビュー)をカスタマイズ
- Rails + Devise 環境でのフレンドリーフォワーディング機能を修正
- Deviseでユーザー登録完了時にウェルカムメールを送信する
- Rails Devise でユーザーがプロフィール情報を更新後に元のページにリダイレクトさせる
- Devise でユーザーがパスワードなしでアカウント情報を変更するのを許可
- Rails Deviseの日本語化辞書ファイル(devise.ja.yml)
- Rails + Devise で admin ユーザー(管理者)を削除できないようにする
- 初回公開日: 2013年12月4日
Leave Your Message!