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
結果
無事に通知を送ることが出来ましたヽ(´エ`)ノ
ちなみにSlack通知のやりかたについては下記に記載してます。