【Rails6】deviseによる新規登録・ログイン時のリダイレクト先変更


はじめに

ポートフォリオ作成中に詰まった点を備忘録として記述しています。
今回は、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では、反映されないため、ルーティングでカスタマイズを行います。

config/routes.rb
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の編集

ここから、リダイレクト先を指定するメソッドを定義します。

app/controllers/companies/registrations_controller.rb
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
app/controllers/companies/sessions_controller.rb
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

上記でリダイレクト先を指定することができました!!!!