deviseでログイン状態からsign_up(登録)画面に遷移した際のリダイレクト先
2種類のユーザ権限があるサービスで、ログイン状態かsign_up(登録)画面にした際に、想定してなかった画面にいリダイレクトされてこまったという話
構成
hoge_user
, fuga_user
という2種類のユーザがあります。それぞれ個別の認証が必要です。
また、それぞれのnamespaceでroot設定しています。
# routes.rb
namespace :hoge_users do
root to: 'tops#show'
~略~
end
namespace :fuga_user do
root to: 'tops#show'
~略~
end
さらに、親のルートではhoge_user
のルートに遷移するように設定しています。
問題
fuga_user
でログイン済状態でfuga_user
のsign_up(登録)画面に遷移しようとするとhoge_user
トップにリダイレクトされてしまう。
ログを見ると以下のように遷移していました。
-
fuga_user/new
(sign_up) -
/
hoge_user/top
ログイン済の場合親のルートにリダイレクトされたため、そこから更にhoge_user
ルートにリダイレクトされてました。
想定としては各ユーザのルート設定したとこにリダイレクトされると思ってたので困った。
調査
deviseのコードを確認しました。
- newでは
require_no_authentication
が呼ばれログイン状態を確認する - ログイン済なら
after_sign_in_path_for
を呼ばれる
なるほど。after_sign_in_path_for
をoverrideしてないので親ルートにリダイレクトされると。
しかもこのアプリ構成上application_controller
ではなく個別のcontrollerでoverrideする必要がある。
→ 2種類のそれぞれのリダイレクト先を設定したいので
→ session_controller
ではすでにやってた。今回はregistration_conroller
対応
全然DRYじゃないんだけど、それぞれのユーザ配下のsession_controller
, registration_controller
で after_sign_in_path_for
をoverrideした。
これ以上増えるようだったらmixinするなり共通化します。
Author And Source
この問題について(deviseでログイン状態からsign_up(登録)画面に遷移した際のリダイレクト先), 我々は、より多くの情報をここで見つけました https://qiita.com/sugiii8/items/de2f37283c3a8edfdd59著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .