如何在Ruby on Rails中显示/维护扩展会话超时窗口

时间:2015-12-19 06:26:26

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我使用了rails devise gem进行身份验证。具体来说,我使用了设计超时模块进行会话超时30分钟。

我需要弹出一个在29分钟后提示的弹出窗口&能够将会话延长30分钟,与Unfuddle.com中的会话完全相同。

在此提示符下有2个按钮和一个计时器:“保持登录状态”,“注销”和计时器60秒。如果我在60秒内单击“保持登录状态”按钮,则会话应延长至下一个30分钟而不更改或刷新页面。如果我点击Logout,那么用户应该注销他的会话并重定向到登录页面。如果我在60秒内没有按下上述任何一个按钮,它会自动重定向到登录页面。 指导将不胜感激。

我在设计session_controller中使用了以下代码:

def skip_timeout

    request.env["devise.skip_trackable"] = true

end 

def extend_admin_session

    request.env["devise.skip_trackable"] = false

    @time_left_insec = Devise.timeout_in - (Time.now - admin_session["last_request_at"]).round

    render :json => @time_left_insec

end

1 个答案:

答案 0 :(得分:1)

要为每个用户动态设置超时,您可以在名为timeout_in的用户模型中定义一个返回超时值的方法。

class User < ActiveRecord::Base
  devise (...), :timeoutable

  def timeout_in
    if self.admin? 
      1.year
    else
      2.days
    end
  end
end

你需要定义一个方法,并且必须相应地调用...

我建议您查看timeout module in Devise

的源代码

希望这能帮到你!!!