Rails Warden before_logout被调用两次

时间:2013-07-15 17:05:25

标签: ruby-on-rails-3 devise warden

当我试图调用'user.my_method'时,我正试着弄清楚为什么我对Warden :: Manager.before_logout的调用为NilClass抛出NoMethodError的原因。然后我在before_logout块中添加了一个调试put调用,并发现每次注销时它都被称为TWICE - 第一次用户为nil,然后在提供用户对象之后立即调用。因此,通过将调用更改为'user.my_method if user',我能够非常好地解决异常,但是我仍然不知道为什么before_logout被调用两次。有没有人见过这个?它可能是那些仅在开发中发生的环境异常之一吗?

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

2 个答案:

答案 0 :(得分:0)

这是旧的,但你可能有两个模型(Warden的情况下的范围):一个用户,另一个用于AdminUser。您可以只为所需的模型/范围使用if语句:

Warden::Manager.before_logout do |user, auth, opts|
    if opts[:scope] == :user
       user.current_sign_in_at = nil
       user.save!
    end
end

答案 1 :(得分:-1)

通过在config / initializers / devise.rb中添加它来解决它。添加代码,以便在注销时执行任何操作。

Warden::Manager.before_logout do |user,auth,opts|
  # store what ever you want on logout
  # If not in initializer it will generate two records (strange)
end