4

我想使用 devise 和:timeoutable.

目前,:timeoutable它正在按预期工作,并在指定的非活动时间段后将用户重定向到登录页面,但除此之外,我们还希望在发生这种情况时进行记录,以帮助优化我们的超时时间。

(显然,除非用户明确注销,否则所有会话都会超时。我们将检查自上次活动以来的时间,以确定它是自然超时还是更可能是我们设置的超时时间太短的结果。)

是否有我可以挂钩的事件或其他检测会话超时的方法SessionController

4

2 回答 2

2

我没有看到任何类型的钩子,但您可以覆盖设计使用的可超时模块中的代码:

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
于 2012-04-10T20:40:48.440 回答
0

我认为您需要做的是记录用户明确单击“注销”的时间。因为:timeoutable有一个默认时间段,用户会话将在该时间段后自动过期。

您可以通过创建Sessions_Controller继承自Devise::SessionsController. 记录当前时间后,不要忘记做super.

于 2012-04-10T16:09:13.993 回答