【发布时间】:2020-01-28 14:53:17
【问题描述】:
我正在尝试为用户创建一个快速登录系统,我需要如果他们激活此选项,会话将在 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
因此,这会将 fastlogin 字段在登录前设置为 true,在登录后设置为 false。
然后在 User 模型中我重写 timeout_in 方法:
def timeout_in
if self.fastlogin
20.seconds
else
Devise.timeout_in
end
end
问题是,似乎 fastlogin 在 user.timeout_in 方法中永远不会变为 true,但调试它似乎在钩子之前和之后发生了变化。
【问题讨论】:
标签: ruby-on-rails session devise