当用户会话使用devise在rails中过期时,flash_timedout =“true”

时间:2013-12-12 15:25:35

标签: ruby-on-rails-3 session devise

我的会话超时代码如下:

在sessions_controller中:

  

prepend_before_filter {request.env [“devise.skip_timeout”] = true}

在用户模型中:

  

设计:超时,:timeout_in => 2.minutes

application.html.erb:

  

           
<%=content_tag :div, msg, :class =>"flash_#{key}", :id => "app_flash"%>
           

如果我的会话过期,我会收到错误的“你的会话已经过期了......”来自设计错误,这很好。

但我在表单之外得到的额外错误为“true”,我将其视为 [:flash_timedout]

请帮助我如何禁用 true [:flash_timedout]?

2 个答案:

答案 0 :(得分:3)

这是一个已知问题。您必须只显示:notice:alert消息,或者从Devise文档中所述的Flash哈希中删除:timedout密钥。

请参阅https://github.com/plataformatec/devise#configuring-controllers

答案 1 :(得分:0)

我能够禁用[:flash_timedout]“真”并提供自定义错误。

我在部分消息中写了以下步骤:

  <% if flash[:timedout] && flash[:alert] %>
    <% flash.keep(:timedout) %>
    <% flash.keep(:alert) %>
    <div class = "alert alert-danger">
      Your session expired. Please sign in again to continue.
    </div>
  <% else %>
    <% flash.each do |name, message| %>
      <div class = "alert alert-<%= message.include?('Invalid') ? 'danger' : 'success'%>">
       <ul>
          <%= message %>
       </ul>
      </div>
    <% end %>
  <% end %>