我在试着弄清楚这个设计。我真的很困惑timedout?方法是怎么回事。
直观地说,您应该能够在没有任何参数的情况下调用user.timedout?,如果用户的会话超时,它将返回true,否则返回false有人能解释一下这个参数在做什么吗?
编辑:
好吧,看来这个方法只能检查用户是否已经超时,如果你已经知道他们最后的访问时间。我想我的下一个问题是:检查其他用户是否超时的最干净方法是什么?(不是当前用户)也就是说,我如何在没有参数的情况下,以上面指定的方式调用timedout?

最佳答案

设计人员将使用管理员存储最后一次请求时间(不是最后一次签名时间)。见:https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb
因此,如果要复制此功能,则需要将最后一个请求时间存储在数据库中,并随每个请求一起更新(在应用程序控制器中的一个后过滤器中)。
一旦有了这个方法,您就可以将它添加到用户中,并使用它来委托给designe timedout方法:

class User < ActiveRecord::Base
  devise :timeoutable, :trackable #etc

  def expired?
    valid_until = last_access_time + 30.minutes
    timedout?(valid_until)
  end

end

如果有用户:
user.expired?

07-27 22:05