要自动注销用户idle/inactive
,直到20分钟。我使用了Devise模块 :timeoutable
,并且还在devise配置文件中设置了config.timeout_in = 20.minutes
。效果很好。
现在,当用户在应用程序中闲置18分钟后,想通知他
“由于您的闲暇时间,您将在2分钟后退出。如果您 希望继续您的会话,请按“确定”。
为此,我在 application.js 中添加了setInterval()
函数,该函数将使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分钟前通知?或任何其他解决方案来实现这一目标?