「user.my_method」を呼び出そうとしたときに、Warden::Manager.before_logout への呼び出しが NilClass の NoMethodError をスローした理由を突き止めようとして、私は頭を悩ませていました。次に、before_logout ブロックに debug puts 呼び出しを追加し、ログアウトごとに 2 回呼び出されていることを発見しました。最初はユーザーが nil で、その直後に、ユーザー オブジェクトが提供されました。そのため、呼び出しを「user.my_method if user」に変更することで、例外を回避することができましたが、before_logout が 2 回呼び出される理由がわからないことにまだ満足していません。他の誰かがこれを見たことがありますか?それはおそらく、開発中にのみ発生する環境異常の 1 つですか?
Devise.setup do |config|
Warden::Manager.after_authentication do |user,auth,opts|
user.update_attributes(is_active: true)
end
Warden::Manager.before_logout do |user,auth,opts|
user.update_attributes(is_active: false) if user
end