Ruby on rails 4 设计为期1天的课程

Ruby on rails 4 设计为期1天的课程,ruby-on-rails-4,devise,session-timeout,Ruby On Rails 4,Devise,Session Timeout,我正在rails 4上工作,这是我使用Desive进行身份验证过程的应用程序之一。一切正常,我想做一件事。用户登录后,该会话将持续1天或直到用户按下注销按钮。例如,如果我在2015年3月8日上午10点登录,它将在2015年3月9日上午10点自动销毁会话,即使我在那个时间工作 devise :timeoutable, :timeout_in => 24.hours 我使用Desive timeoutable(上面的代码),但它需要24小时不活动 config.timeout_in = 24

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

devise :timeoutable, :timeout_in => 24.hours
我使用Desive timeoutable(上面的代码),但它需要24小时不活动

config.timeout_in = 24.hours

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

designe.rb
配置文件中的说明中的

超时\u说:

要在没有活动的情况下使用户会话超时的时间。此后 再次要求用户提供凭据的时间

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

要创建真正持续x小时的会话,您可以在
ApplicationController
中创建一个
before\u action
过滤器,将用户当前登录时间与当前时间进行比较。类似(未经测试):

控制器/application_controller.rb中的
#
行动前:检查最大会话时间
def检查\u最大会话\u时间
如果当前\u user.current\u在+24.hours

配置中的
超时\u仍应为
24.hours
,否则用户将提前注销。

它将检查来自用户权限的每个请求?还有其他更好的解决方案吗?您必须以某种方式在每个请求中检查此项。如果您不想访问数据库,也许您可以使用以下答案:
# 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