deviseでログイン後のリダイレクト先を変更する
はじめに
deviseはrailsで認証画面を作るのをサポートしてくれるgemです。
使い方はこのあたりを見ればいいと思います。
- (deviseでログインにemailではなくusernameを使用する
- devise と cancan を使って権限管理可能な管理画面を作る。 (1)
- devise と cancan を使って権限管理可能な管理画面を作る。 (2)
今回は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
参考リンク
- https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in
- http://d.hatena.ne.jp/willnet/20110508/1304869397
まとめ
- deviseは便利ですね
- devise/session/new.html.erb とかのテンプレートファイルを分けるにはどうしたらいいんだろう。
RailsとiPhoneではじめるアプリケーション開発
posted with amazlet at 13.09.03