我想使用 devise 和:timeoutable
.
目前,:timeoutable
它正在按预期工作,并在指定的非活动时间段后将用户重定向到登录页面,但除此之外,我们还希望在发生这种情况时进行记录,以帮助优化我们的超时时间。
(显然,除非用户明确注销,否则所有会话都会超时。我们将检查自上次活动以来的时间,以确定它是自然超时还是更可能是我们设置的超时时间太短的结果。)
是否有我可以挂钩的事件或其他检测会话超时的方法SessionController
?
我想使用 devise 和:timeoutable
.
目前,:timeoutable
它正在按预期工作,并在指定的非活动时间段后将用户重定向到登录页面,但除此之外,我们还希望在发生这种情况时进行记录,以帮助优化我们的超时时间。
(显然,除非用户明确注销,否则所有会话都会超时。我们将检查自上次活动以来的时间,以确定它是自然超时还是更可能是我们设置的超时时间太短的结果。)
是否有我可以挂钩的事件或其他检测会话超时的方法SessionController
?
我没有看到任何类型的钩子,但您可以覆盖设计使用的可超时模块中的代码:
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
我认为您需要做的是记录用户明确单击“注销”的时间。因为:timeoutable
有一个默认时间段,用户会话将在该时间段后自动过期。
您可以通过创建Sessions_Controller
继承自Devise::SessionsController
. 记录当前时间后,不要忘记做super
.