@Konboi memo

主に技術に関してつらつらと。

deviseでログイン後のリダイレクト先を変更する

はじめに

deviserailsで認証画面を作るのをサポートしてくれるgemです。

使い方はこのあたりを見ればいいと思います。

今回はdeviseでログインした後のリダイレクト先を変更したくて、それに少しハマったのでメモしておきます。

解決方法

解決方法の前に devise でデフォルトのログイン後にリダイレクトされる先は下記の用になっています

1. {deviseで指定したmodel名}_root_path 
 ( modelがuserならば, user_root_path )

2. root_path

肝心の解決方法は、 devise のメソッドを application controller で上書きします。

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

勘の良い人は気づいたかもしれませんが、 after_sign_out_path_for にすれば ログアウト時のリダイレクト先も指定することができます。

ただ、今回はこれでめでたしめでたしとかいきませんでした。

というのも AdminUser と User の複数モデルでdeviseの認証を使用していたので、 上記の方法だと両方とも hoge_path にリダイレクトされてしまされてしまいます。

AdminUserが認証を行った場合は管理画面TOPにリダイレクトしたいので、下記の用にresouceでリダイレクト先を変えるようにしました。

class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
      case resource
      when User
        hoge_path
      when AdminUser
        admin_root_path
      end
    end
  end
end

参考リンク

まとめ

  • deviseは便利ですね
  • devise/session/new.html.erb とかのテンプレートファイルを分けるにはどうしたらいいんだろう。


RailsとiPhoneではじめるアプリケーション開発
栗田 由菜
インプレスジャパン
売り上げランキング: 7,850