当我试图调用'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
答案 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