我想使用设计和:timeoutable
来记录用户会话超时的时间。
目前,:timeoutable
正在按预期工作,并在指定的不活动时间段后将用户重定向到登录页面,但除此之外,我们还要记录何时发生这种情况以帮助改进我们的超时期限
(显然除非用户明确注销,否则所有会话都会超时。我们将检查自上次活动以来的时间,以确定它是否是自然超时,或者更可能是因为我们设置的超时时间太短。)
是否有可以挂钩的事件或SessionController
中检测会话超时的其他方式?
答案 0 :(得分:1)
我没有看到任何类型的钩子,但你可以覆盖设计使用的超时模块中的代码:
module Devise
module Models
module Timeoutable
def timedout?(last_access)
# your custom code goes into this method
return false if remember_exists_and_not_expired?
!timeout_in.nil? && last_access && last_access <= timeout_in.ago
end
end
end
end
答案 1 :(得分:0)
我认为您需要做的是记录用户点击的时间&#34;退出&#34;明确。因为:timeoutable
具有默认时间段,之后用户会话将自动过期。
您可以记录&#34;退出&#34;通过创建继承自Devise::SessionsController
的Sessions_Controller
来创建活动。记录当前时间后,不要忘记super
。