LoginSignup
0
0

More than 3 years have passed since last update.

deviseでログイン状態からsign_up(登録)画面に遷移した際のリダイレクト先

Posted at

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_controllerafter_sign_in_path_for をoverrideした。

これ以上増えるようだったらmixinするなり共通化します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0