📚
Rails Devise フレンドリーフォワーディングについて
Devise 4.7 バージョン以降の場合、フレンドリーフォワーディングをする際、
以下の参考にあるように、
store_user_location
だったり、storable_location?
等は必要ありません。
deviseがよしなにやってくれているみたいです。
必要なのはafter_sign_in_path_forメソッドをオーバーライドするくらいです。
def after_sign_in_path_for(resource_or_scope)
stored_location_for(resource_or_scope) || super
end
1点ハマったのは、
deviseがsessionに値を保存するかどうか判定する際、Ajaxリクエストの場合は保存しないようにしてくれています。
# 下記がtrueなら、保存。
!request.xhr?
# 正確にはwiki にも書いてありますが、以下のような場合は保存しないとのことです。
# GETメソッドでない場合
# Deviseコントローラの画面である場合
# Ajaxリクエストの場合
しかし、axiosでのAjaxで通信時、request.xhr?
の判定がfalseになり、うまく作動してくれません。
なので、JavaScript側でaxiosのヘッダーにX-Requested-Withを追加してあげる必要がありました。
Axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
※ 以下、参考にさせていただきました。
Discussion