2011-10-10 55 views
0

我在我的应用程序控制器中实现了Devise call backs中的代码。首先这是正确的地方?奇怪的设计/守望者挂钩错误/行为

我同时获得

after_authentication 

after_set_user 

工作。但我得到这个错误

before_logout 

NoMethodError in Devise::SessionsController#destroy 
undefined method `update_attribute' for nil:NilClass 

有趣的是,数据库记录更新,尽管错误信息。奇怪。

+0

什么是你正在试图做什么? – janders223

+0

我有一个用户模型和一个userlogin模型。当用户登录时,我想创建一个userlogin条目,其中存储,ip,会话,日期时间,代理等等。当用户注销时,我想用注销时间更新该记录。登录和注销可以从任何页面启动,这就是为什么我将它放在应用程序控制器中,或者我应该重写设计会话并将代码放在那里? –

+0

内置于设计中的可跟踪模块已经跟踪登录时间,计数和IP地址。至于在注销时更新日期线,是的,你会想重写设计的会话控制器的销毁方法,应该没有必要更深入到监狱。 – janders223

回答

0

这是一段时间了。当我执行after_authentication和before_logout时,我得到了多个记录,真的很奇怪。

为了澄清我想在每个会话上存储ip等,而不仅仅是最后一个会话。

我通过在config/initializers/devise.rb中添加它来解决它。为您想要存储的会话添加代码。

Warden::Manager.after_authentication do |user,auth,opts| 
    #store what ever you want on login 
end 

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

文档:https://github.com/hassox/warden/wiki/callbacks –