0

「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
4

2 に答える 2

1

これは古いですが、おそらく 2 つのモデル (Warden の場合はスコープ) があります。1 つは User 用で、もう 1 つは AdminUser 用です。必要なモデル/スコープだけに if ステートメントを使用できます。

Warden::Manager.before_logout do |user, auth, opts|
    if opts[:scope] == :user
       user.current_sign_in_at = nil
       user.save!
    end
end
于 2015-09-01T20:59:01.387 に答える