我正在尝试理解Devise source code for the timeoutable module。我对timedout?
方法发生的事情感到困惑。
直观地说,您应该能够在没有任何参数的情况下调用user.timedout?
,如果用户的会话超时则返回true,否则返回false。有人可以解释这个参数在做什么吗?
修改:
好的,所以看起来这个方法只能检查用户是否已经超时,如果你已经知道他们的上次访问时间。我想我的下一个问题是:检查其他用户是否超时的最简洁方法是什么? (不是current_user)。也就是说,如何以上面指定的方式调用timedout?
,没有参数?
答案 0 :(得分:2)
Devise将使用Warden存储上次请求时间(不是last_in_time)。请参阅:https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb
因此,如果要复制此功能,则需要将last_request_time存储在数据库中并使用每个请求进行更新(在application_controller中的after_filter中)。
一旦那样,您可以将此方法添加到用户,并使用它来委托设计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?