ログイン認証にdeviseを用いたアプリケーションを作っています。
最近のウェブサービスだとよくあるようにまず初回登録とメールで認証を終えた後はログイン後にウィザード形式の登録画面に飛ばしたいです。
また業務上必要なプロフィール等は絶対に入力させたいので、
ログインしたユーザーエンティティが持つfirst_login_flag(bool)というカラムがfalseである限り、
どのコントローラーのどのアクションを踏んでもウィザード形式の登録画面を飛ばすようにしたいです。
ウィザード登録できたらこのフラグをtrueにするようにします。
しかし現在書いている処理ですとログイン後は上手くウィザード画面に飛んでくれるのですが、
例えば直接/user/show/1とurlを叩いても、普通にその画面に遷移ができてしまいます。
処理は以下のようにしております
#application_controller.rb class ApplicationController < ActionController::Base before_action :set_input, except: :after_sign_in_path_for def after_sign_in_path_for(resource) set_input end def set_input if user_signed_in? if user.first_login_flag == false first_user_steps_path end else root_path end end end
一応説明ですが、
共通コントローラーであるapplication_controllerにset_inputというdeviseの組込メソッドを用いたメソッドを用意してます、
ifがネストしてて見辛いかもしれませんが、処理としては
・ログインしているかを確認
・ログインしていたらログインユーザーのモデルからfirst_login_flagの値を確認
・falseだったらfirst_user_steps_path
(ウィザード画面のアクション)に飛ばすようにしており、
これを全コントローラーの共通処理としたいのでapplication_controllerのbefore_actionとしています。
ちなみにafter_sign_in_path_forをexceptしないと2重リダイレクトが起こる為、上記のような書き方になっております。
この書き方の何がいけないのでしょうか?
長くなりましたがよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/03 01:58 編集
2019/10/03 02:01
2019/10/03 02:38
退会済みユーザー
2019/10/03 03:41
2019/10/04 01:09