2013-07-15 57 views
0

當我嘗試調用'user.my_method'時,我拉着頭髮試圖弄清楚爲什麼我給Warden :: Manager.before_logout的調用爲NilClass拋出一個NoMethodError。然後,我在before_logout塊中添加了一個debug puts調用,並發現它在每次註銷時都被稱爲TWICE - 第一次用戶爲零,然後在用戶對象提供之後立即調用。所以我能夠通過改變'user.my_method if user'的調用來簡單地避開這個異常,但是我仍然不知道爲什麼before_logout會被調用兩次。有沒有人看過這個?這可能只是那些發生在發展中的環境異常?Rails Warden 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 

回答

-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 
+0

但是這就是我擁有它的原因,這就是爲什麼它很混亂。以下是配置文件的前幾行: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)如果用戶 結束 –

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