Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计:在操作之前/之后打开自定义会话控制器的情况下动态设置超时_Ruby On Rails_Session_Devise - Fatal编程技术网

Ruby on rails 设计:在操作之前/之后打开自定义会话控制器的情况下动态设置超时

Ruby on rails 设计:在操作之前/之后打开自定义会话控制器的情况下动态设置超时,ruby-on-rails,session,devise,Ruby On Rails,Session,Devise,我正在尝试为用户创建一个快速登录系统,如果他们激活此选项,会话将在20秒后超时 我在CustomSessionController中所做的是: class CustomSessionsController < Devise::SessionsController before_action :before_login, only: :create, if: :fastlogin? after_action :after_login, only: :create, if: :fast

我正在尝试为用户创建一个快速登录系统,如果他们激活此选项,会话将在20秒后超时

我在CustomSessionController中所做的是:

class CustomSessionsController < Devise::SessionsController
  before_action :before_login, only: :create, if: :fastlogin?
  after_action :after_login, only: :create, if: :fastlogin?

  def before_login
    user = finduserlogic…
    if user && user.valid_password?(params[:user][:password])
      user.fastlogin = true
      user.save!
    end
  end

  def after_login
    current_user.fastlogin = false
    current_user.save!
  end

  def fastlogin?
    params[:user][:fastlogin].present?
  end
end

问题是,在user.timeout\u in方法中,fastlogin似乎永远不会变为true,但在调试之前和之后,它似乎会发生变化。

设计超时策略无法很好地处理可变超时:中的
timeout\u在检查会话有效性时应该是正确的(在登录后的每个请求中,当您已经将
fastlogin
设置回
false
)时,不在创建时

在您的情况下,超时是单个会话的属性,而不是用户的属性,因此您必须将其保留在warden会话中并用于计算。 查看以了解其工作原理

def timeout_in
  if self.fastlogin
    20.seconds
  else
    Devise.timeout_in
  end
end