Deviseでログイン時にフレンドリーフォワーディングさせる
あるページからログインを行ったら、元いたページに戻してあげる機能を実装する。
今回は「ページA→ログインするSNSを選択するページ(omniauth)→ログイン(外部サイト)→ページA」という流れなので
SNS選択ページに以下のロジック追加
def select_sns
store_location_for(:user, request.referrer)
end
SNS選択ページで前に見ていたページの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
を見つけたので、見てよかった〜。