Ruby on rails 设计:在操作之前/之后打开自定义会话控制器的情况下动态设置超时
我正在尝试为用户创建一个快速登录系统,如果他们激活此选项,会话将在20秒后超时 我在CustomSessionController中所做的是: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
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