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を見つけたので、見てよかった〜。


Profile picture

ぴーやま
プログラミングを嗜んでします。中華料理で出てくるたまごふわふわのコーンスープが好きです。