【问题标题】:Rails dynamic session timeout using devise and session store使用设计和会话存储的 Rails 动态会话超时
【发布时间】:2014-01-14 16:57:58
【问题描述】:

我知道我可以使用here 中描述的设计进行动态会话超时(每个用户)

这之前工作得很好,但现在我正在使用 Rails 会话存储,它不再工作了。

我google了很久没找到答案,有人知道怎么做吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails dynamic devise session-timeout session-store


    【解决方案1】:

    我现在已经用一些 before_filters 完成了:

    class ApplicationController < ActionController::Base
      before_filter :update_session, :check_if_session_is_valid
    
      ...
      def check_if_session_is_valid
        session_timeout = current_user.try(:session_timeout) || 1800
        if session[:timestamp] <= session_timeout.seconds.ago.to_i
          session[:user_id] = nil
        end
      end
    
      def update_session
        session[:timestamp] = Time.now.to_i
      end
    

    在轮询器使用的控制器中,我添加了这个(轮询器不应该更新会话):

    skip_before_filter :update_session, :only => :get_new
    

    【讨论】:

      【解决方案2】:

      使用 devise 最简单的会话超时方法是使用 Devise 'timeoutable' 模块。以下 2 行将提供会话超时功能,仅当您在 Rails 应用程序中使用设计时。

      第 1 步:在你的 User.rb 模型中声明这个

       devise: timeoutable
      

      第二步:

      app/config/initializers/devise.rb中添加以下行,Devise默认设置为30分钟。

      config.timeout_in = 15.minutes
      

      希望这对你有用!

      谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        相关资源
        最近更新 更多