#はじめに
ポートフォリオ作成中に詰まった点を備忘録として記述しています。
今回は、deviseにてユーザー新規登録・ログイン機能を実装しました。法人会員と個人会員の2種類のログインユーザーがおり、新規登録時及びログイン時には、法人or個人によって違う画面遷移にしたいと思い、リダイレクト先の変更を試みました。
deviseではデフォルトでリダイレクト先が指定されているため、deviseのコントローラーをカスタマイズする必要がありました。
#環境
Ruby on Rails'6.0.0'
Ruby'2.6.5'
#前提
deviseを使用し、ログイン機能を実装済み。
#①controllerの作成
% rails g devise:controllers companies
上記コマンドにより、法人側deviseのcontrollerを編集することができます。app/controllers/companies側にファイルが生成されると思います。
#②ルーティングの設定
rails routesでルーティングを確認すると、
new_company_session GET /companies/sign_in(.:format) devise/sessions#new
company_session POST /companies/sign_in(.:format) devise/sessions#create
(省略)
new_company_registration GET /companies/sign_up(.:format) devise/registrations#new
上記のように表示されます。devise/sessionsやdevise/registrationでは、反映されないため、ルーティングでカスタマイズを行います。
devise_for :companies, controllers: {
sessions: 'companies/sessions',
registrations: 'companies/registrations'
}
カスタマイズを行い、再度rails routesを行うと下記のように表記が変わると思います。
new_company_session GET /companies/sign_in(.:format) companies/sessions#new
company_session POST /companies/sign_in(.:format) companies/sessions#create
(省略)
new_company_registration GET /companies/sign_up(.:format) companies/registrations#new
#③controllerの編集
ここから、リダイレクト先を指定するメソッドを定義します。
class Companies::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
before_action :configure_account_update_params, only: [:update]
def after_sign_up_path_for(_resource)
companies_articles_path(リダイレクト先のpath)
end
(省略)
end
class Companies::SessionsController < Devise::SessionsController
before_action :configure_sign_in_params, only: [:create]
def after_sign_in_path_for(_resource)
companies_articles_path(リダイレクト先のpath)
end
(省略)
end
上記でリダイレクト先を指定することができました!!!!