📚

Rails Devise フレンドリーフォワーディングについて

2023/02/05に公開

Devise 4.7 バージョン以降の場合、フレンドリーフォワーディングをする際、
以下の参考にあるように、
store_user_locationだったり、storable_location?等は必要ありません。
deviseがよしなにやってくれているみたいです。

参考wiki

必要なのは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';

※ 以下、参考にさせていただきました。
https://qiita.com/kazutosato/items/7e9bd3b9ecd3f504fc79

Discussion