【问题标题】:strange Devise / Warden hooks error / behavior奇怪的设计/守望者挂钩错误/行为
【发布时间】:2011-10-10 22:33:18
【问题描述】:

我已经在我的应用程序控制器中实现了Devise call backs 中的代码。首先这是正确的地方吗?

两个都买了

after_authentication 

after_set_user

工作。但我收到此错误

before_logout

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

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

【问题讨论】:

  • 您到底想做什么?
  • 我有一个用户模型和一个用户登录模型。当用户登录时,我想创建一个用户登录条目,用于存储 IP、会话、日期时间、代理等。当用户注销时,我想用注销时间更新该记录。登录和注销可以从任何页面启动,这就是我将其放在应用程序控制器中的原因,还是应该覆盖设计会话并将代码放在那里?
  • 设计中内置的可跟踪模块已经跟踪登录时间、计数和 IP 地址。至于在注销时更新日期线,是的,您会想要覆盖设计会话控制器的 destroy 方法,应该没有必要深入了解warden。

标签: ruby-on-rails devise warden


【解决方案1】:

这是很久以前的事了。当我实现 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多