Deviseでログイン時にフレンドリーフォワーディングさせる
あるページからログインを行ったら、元いたページに戻してあげる機能を実装する。
今回は「ページA→ログインするSNSを選択するページ(omniauth)→ログイン(外部サイト)→ページA」という流れなので
SNS選択ページに以下のロジック追加
def select_sns
store_location_for(:user, request.referrer)
endSNS選択ページで前に見ていたページのURLを取得して
deviseのstore_location_forにセット。
「:user」ってなっている所はscopeなので、よきにはからう。
コールバック後に呼ばれるafter_sign_in_path_forの中で、
store_location_forで設定した値がないかをチェックするstored_location_forという処理があるので、設定済みの値があればそちらに飛ばしてくれるようになる。
フォワーディングを実装するにあたって、after_sign_in_path_forをapplicationControllerに書いて、
その中でsessionに持たせたリファラのURLを判別…という処理を書いてみようとして
Deviseのafter_sign_in_path_forのロジックを確認したら、stored_location_forを見つけたので、見てよかった〜。