状況
Railsでフレンドリーフォワーディングを実装しています。以下のような関数を作りました。
session[:referer_url]
にリダイレクトしたいURLを登録しておき、redirect_back_or(root_url)
でリダイレクトするつもりです。
rb
1def redirect_back_or(default) 2 redirect_to(session[:referer_url] || default) 3 session.delete(:referer_url) 4end 5 6def store_referer 7 session[:referer_url] = request.referer 8end
ログアウトの時は正常に動作するのですが、ログイン時にうまく動きません。
Twitterでログインするようにしているので
storeメソッド→TwitterAPI→createメソッド
という流れで処理が進みます。
rb
1def store 2 store_referer 3 # ここで処理を止めてsession[:referer_url]を確認するとリダイレクトしたいページのURLが表示される 4 redirect_to '/auth/twitter' 5end 6 7def create 8 # ここで処理を止めてsession[:referer_url]を確認すると`example.com/login`と表示される 9 redirect_back_or(root_url) 10end 11 12def destroy 13 store_referer 14 log_out if logged_in? 15 flash[:success] = 'ログアウトしました' 16 redirect_back_or(root_url) #フレンドリーフォワーディングに成功する 17end
storeメソッドの中でsession[:referer_url]
の値を確認すると、リダイレクトしたいURLが取得できるのですが、
createメソッドの中で確認すると、/login
という値に変わってしまい、うまくリダイレクトが出来ません。
('/login'はstoreメソッドを発火するURLです。)
お聞きしたいこと
- sessionの値が書き換わってしまう原因は何でしょうか。
- この状況でフレンドリーフォワーディングを実装する方法はありますでしょうか
どちらか片方でも構いませんので、ご教授いただけますと幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー