Я пытаюсь создать систему быстрого входа для пользователей, и мне нужно, чтобы, если они активируют эту опцию, сеансы будут синхронизированы через 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.
Затем в модели пользователя я переопределяю метод timeout_in:
def timeout_in
if self.fastlogin
20.seconds
else
Devise.timeout_in
end
end
Проблема в том, что fastlogin никогда не превращается в true в методе user.timeout_in, но при отладке кажется, что он изменяется до и после ловушек.