ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

また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を書き換えているところを探してみましたが見つけられませんでした。ちょっと気になりますね。