【问题标题】:How to show/maintain Extend Session timeout Window in Ruby on Rails如何在 Ruby on Rails 中显示/维护扩展会话超时窗口
【发布时间】:2016-12-04 01:41:53
【问题描述】:

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

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

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

我在设计 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

【问题讨论】:

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


    【解决方案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的源代码

    希望对你有帮助!!!

    【讨论】:

    • 感谢您的回复维奈。我在 devise.rb 文件中为所有用户设置了默认时间为 30 分钟,因此 30 分钟后,用户的会话被破坏。我只是想在第 29 分钟到第 30 分钟之间延长会话。所以,我已经完成了以下步骤,但没有找到解决方案:我请求服务器在此间隔(最后 1 分钟)之间延长会话。但是 java 脚本计时器和 Rails 计时器与此间隔不匹配,因为当我单击“扩展会话”按钮时,rails 已经注销了会话并且我收到了真实性令牌错误。卡住了
    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多