设计会话为期1天

时间:2015-05-08 08:09:48

标签: ruby-on-rails-4 devise session-timeout

我正在使用rails 4,我的一个应用程序我正在使用设计进行身份验证过程。一切正常,我想做一件事。用户登录后,该会话将持续1天或直到用户按下注销按钮。例如,如果我在2015年3月8日上午10点登录,它将在2015年3月9日上午10点自动销毁会话,即使我正在那个时间工作。

devise :timeoutable, :timeout_in => 24.hours

我使用了设计超时(上面的代码)但它需要24小时不活动。

config.timeout_in = 24.hours

在devise.rb中,我尝试配置它,但它再次失败,它使用户不活动。如果有人知道更好的想法或代码请与我分享。所需的任何信息只需添加评论我将编辑我的问题。提前谢谢。

1 个答案:

答案 0 :(得分:2)

timeout_in配置文件中的

devise.rb说明:

  

您希望在没有活动的情况下超时用户会话的时间。在这之后     时间将再次要求用户提供凭证。

因此,这不是登录后的时间,而是自上次用户活动以来的时间。那不是你想要的。

要创建真正持续x小时的会话,您可以在before_action中创建一个ApplicationController过滤器,用于将用户的current_sign_in_at时间与当前时间进行比较。像(未经测试)的东西:

# in controllers/application_controller.rb
before_action :check_max_session_time

def check_max_session_time
  redirect_to destroy_user_session_path if current_user.current_sign_in_at + 24.hours < Time.now
end

timeout_in配置仍应为24.hours,否则用户将提前注销。