またDeviseで死ぬほど詰まってた
やりたいこと
ログインしていない状態で認証が必要なページ(ここでは仮にAとします)にアクセスする→ログインページへ移動→ログインに成功するとAへ移動
これ。「フレンドリーフォワーディング」という名前があるそうです。
正解?
公式のHow to通りにやってもうまく行かなかったのでいろいろ引っ掻き回した結果、Devise::SessionsControllerを継承したクラスでafter_sign_in_path_forを以下のようにオーバーライドするという結論に至りました。
class Users::SessionsController < Devise::SessionsController protected def after_sign_in_path_for(resource) session[:user_return_to] || user_root_path end end
ググラビリティなさすぎてつらい。しかし、Gitを使ってい(て、なおかつまめにコミットしてい)ると、うまくいかなったらいったんstashしてやりなおし、みたいなことができるのでいい感じだなということがわかりました。それにしてもこの変数、どこで設定されているんだろう…Devise中でsessionを書き換えているところを探してみましたが見つけられませんでした。ちょっと気になりますね。