Для автоматического выхода пользователя из режима idle/inactive
до 20 минут. Я использовал модуль Devise :timeoutable
, а также установил config.timeout_in = 20.minutes
в файле конфигурации devise. Который прекрасно работает.
Теперь, когда пользователь был неактивен в приложении в течение 18 минут, хотел бы уведомить его
"Вы выйдете из системы через 2 минуты из-за отсутствия активности. Если вы
чтобы продолжить сеанс, нажмите Ok "
Для этого я добавил setInterval()
функцию внутри application.js , которая будет вызывать Ajax каждую минуту для проверки сеанса пользователя (я установил время истечения вручную в сеансе, как показано ниже).
application_controller.rb:
class ApplicationController < ActionController::Base
before_action :renew_user_session
def renew_user_session
session[:expires_at] = (Time.now + 20.minutes).to_s
end
end
users_controller.rb:
class UsersController < ApplicationController
skip_before_action :renew_user_session, only: :validate_user_session
# this method is called in setInterval() through ajax
def validate_user_session
status = true
if user_signed_in?
status = (Time.parse(session[:expires_at]) - 2.minutes) > Time.now
end
respond_to do |format|
format.json { render json: status }
end
end
end
но всякий раз, когда я звоню Ajax, он активирует пользователя. Есть ли способ проверить время бездействия пользователя? и уведомить до 2 минут? или какое-либо альтернативное решение для достижения этой цели?