【问题标题】:Detect when a devise session expires检测设计会话何时到期
【发布时间】:2012-04-22 17:29:23
【问题描述】:

我想使用 devise 和 :timeoutable 记录用户会话何时超时。

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 session devise


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      您可以通过创建一个继承自Devise::SessionsControllerSessions_Controller 来记录“注销”活动。记录当前时间后,别忘了super

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多