development > Ruby On Rails > deviseにカスタマイズ用のコントローラーを作る
Ruby On Rails

deviseにカスタマイズ用のコントローラーを作る

Large?1464706674

前回の記事で基本的なユーザー認証は行えるようになりましたが、挙動をコントロールしたい場合にはどうすれば良いか、というお話です。

カスタマイズ用コントローラーを作成する

deviseの挙動をコントロールする際には、それぞれ

  • Devise::RegistrationsController
  • Devise::SessionsController
  • Devise::PasswordsController

を継承したコントローラーを作り、そこでカスタマイズをするのがセオリーです。なので、app/controllers/users配下に以下の通りにコントローラーを3つ作成しましょう。

# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
end
# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
end
# app/controllers/users/passwords_controller.rb
class Users::PasswordsController < Devise::PasswordsController
end

あとは、例えばサインアップ時にWelcomeメールを送りたいのであれば、

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super
    Welcomeメールを送るためのなにか
  end
end

としておくと、superの部分で通常のサインアップフローが流れたあとにWelcomeメールを送るコードが実行されるようになります。

ルーティングを修正する

今のところ、ルーティングは

                  Prefix Verb   URI Pattern                    Controller#Action
                    root GET    /                              home#index
              home_index GET    /home/index(.:format)          home#index
        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

となっていると思います。このController#Actionのところをdevise配下でなくusers配下に切り替えるためには、config/routes.rbのdevise_for :usersの部分を

devise_for :users, controllers: {
    registrations:  "users/registrations",
    sessions:       "users/sessions",
    passwords:      "users/passwords"
  }

と書き換えると、ルーティングも

                  Prefix Verb   URI Pattern                    Controller#Action
                    root GET    /                              home#index
              home_index GET    /home/index(.:format)          home#index
        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

と置き換わります。

Small?1464706674

この記事が気に入ったらいいね!して
9bar の最新記事を受け取りましょう

Thumb?1464706674

9bar の最新記事をお届けします!

新着記事