会话超时前2分钟,警告用户并使用Devise |滑轨5

时间:2019-01-04 11:45:15

标签: javascript ruby-on-rails ruby devise ruby-on-rails-5

要自动注销用户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分钟前通知?或任何其他解决方案来实现这一目标?

0 个答案:

没有答案