如何防止特定页面上的自动注销用户设计?

时间:2011-05-18 08:34:44

标签: ruby-on-rails devise authentication sign out

我的RoR网站上有基于设计的auth系统,我需要在一段时间不活动后自动注销用户。但我在我的网站上也有一些页面,这些页面被创建为长时间打开(用户只会看到页面,其中信息由ajax更新),我想在打开此页面时不签署用户。

有人知道该怎么做吗?或者如何告诉Devise ajax请求也是用户活动?

1 个答案:

答案 0 :(得分:1)

首先确保你已经安装了1.5.2,如果没有,升级它,这个问题已经有6个月了: - )我希望你已经解决了这个问题。

当您处于要阻止自动注销的页面时,您可以更改timeout_in返回值。

例如:

class Student < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :timeoutable

  def timeout_in
      if session[:auto_sign_out] then
         #the normal period of signout
         30.minutes
      else
         #very long period, to prevent sign-out
         100.years
      end
  end
end

然后,您可以在ApplicationController上轻松添加before_filter来设置session[:auto_sign_out]

像这样:

before_filter :manage_page_auto_sign_out


def manage_page_auto_sign_out
# check the params, and see if the id is the id of the specific page
if params[:id] == EXCLUDED_PAGE_ID then
session[:auto_sign_out]= false
else
session[:auto_sign_out]= true
end
end

另外,您可以通过检查页面的控制器名称来添加其他条件以确保您正在检查所需的页面:

def manage_page_auto_sign_out
# check the params, and see if the id is the id of the specific page
if controller_name == 'pages' && params[:id] == EXCLUDED_PAGE_ID then
session[:auto_sign_out]= false
else
session[:auto_sign_out]= true
end
end

你需要检查页面控制器的名称,我希望这有帮助