使用设计和会话存储Rails动态会话超时

时间:2014-01-14 16:57:59

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

我知道我可以使用描述here

之类的设计来执行动态会话超时(每个用户)

此前工作正常,但现在我正在使用rails会话存储,它不再起作用了。

我google了很长时间但没有找到答案,有人知道怎么做吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

第1步:在您的User.rb模型中声明此

 devise: timeoutable

第2步:

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

config.timeout_in = 15.minutes

希望这适合你!

谢谢!