deviseを利用したサインイン・サインアウトの遷移先(リダイレクトURL)を変更する方法

Ruby

前回、『deviseのインストール手順をシンプルなログイン機能の実装で理解する』でdeviseを利用した認証機能の実装方法について紹介しました。

deviseのインストール手順をシンプルなログイン機能の実装で理解する

2021年4月14日

deviseでは、サインイン・サインアウト後のリダイレクトURL(遷移先の画面)はデフォルトでルートページ(/)です。しかし、「ログイン後はマイページにリダイレクトさせたい」といった要件もあるでしょう。

そこで今回はdeviseのリダイレクトURLの変更方法について紹介します。

今回実装する内容について

今回はサインイン後にマイページ(/my)へリダイレクトするように修正をします。

サインイン後の画面作成

サインイン後に遷移するマイページの作成を行います。

ルーティングの追加

単数形リソース(resource)のルーティングを追加します。

config/routes.rb

resource :my, only: %i(show)

コントローラの作成

コントローラを作成します。

$ rails g controller Mies show

deviseのヘルパーメソッドであるauthenticate_user!before_actionに設定し、認証ユーザーのみアクセスできるようにします。

mies_controller.rb

class MiesController < ApplicationController
+ before_action :authenticate_user!
  def show
  end
end

リダイレクトURLの変更

リダイレクトURLはdeviseのヘルパーメソッドをオーバーライドすることで変更できます。

サインイン後のパスはafter_sign_in_path_for、サインアウト後のパスはafter_sign_out_path_forで定義されています。

今回はサインイン後にマイページへリダイレクトさせたいため、以下のようにコントローラを編集します。

application_controller.rb

class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    mies_show_path
  end
end

動作確認

サインイン後、マイページに遷移すればOKです。

さいごに

Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!

Rubyのオススメ参考書