窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

RubyonRails:deviseのControllerをちょっとだけカスタマイズする

Moook(https://moook.herokuapp.com/)では、deviseで認証機能を作っています。
管理用にユーザーが新規登録されたらslack通知が行われるようにしたかったのですが、deviseはdefaultではコントローラーの実体のソースが無いので、一定の手順を踏む必要があります。その手順を備忘目的でメモしておきますφ(..)

やりかた

前提情報

今回手順を実施した環境の情報は下記の通りです。

gem version
rails 5.1.2
devise 4.3.0

また既にrails g devise Userを実施しており、devise用のユーザーモデルが作成済みの状態を想定しています。

コントローラーのソースファイルを生成する

rails g devise:controllers usersを実行し、コントローラーのファイルを作成します。実行するとapp/controller/users配下にdeviseの各種コントローラーが生成されます。

# deviseのコントローラーのファイルを生成
$ rails g devise:controllers users
Running via Spring preloader in process 46167
      create  app/controllers/users/confirmations_controller.rb
      create  app/controllers/users/passwords_controller.rb
      create  app/controllers/users/registrations_controller.rb
      create  app/controllers/users/sessions_controller.rb
      create  app/controllers/users/unlocks_controller.rb
      create  app/controllers/users/omniauth_callbacks_controller.rb

routeの変更

ルーティングの設定を生成したファイルを参照するように変更します。

routes.rb

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

カスタマイズを加えてみる

カスタマイズを加える前に実際に生成されたファイルを見てみます。
Users::RegistrationsController < Devise::RegistrationsControllerと記載のあるとおり、元のdeviseのユーザー作成のコントローラーを継承したファイルが生成されていると見て取れます。
そのため、各メソッドのコメントアウトを解除(メソッドをオーバーライド)し、super以降に追加したい処理を記載すれば、処理を追加出来ます。

superの意味やrubyのクラスの継承については下記がわかりやすいと思います。 www.rubylife.jp

controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  # before_action :configure_sign_up_params, only: [:create]
  # before_action :configure_account_update_params, only: [:update]

  # GET /resource/sign_up
  # def new
  #   super
  # end

# 省略

end

今回は、ユーザー作成処理にカスタマイズを加え、Slack通知を行うようにしたかったので下記のようにしました。

controllers/users/registrations_controller.rb

  def create
    super
    notice_slack("Moookに新しいユーザーが登録されました!")
  end

結果

無事に通知を送ることが出来ましたヽ(´エ`)ノ

f:id:madogiwa0124:20171126221229p:plain

ちなみにSlack通知のやりかたについては下記に記載してます。

madogiwa0124.hatenablog.com

参考

qiita.com