Flash消息未被清除

时间:2011-01-13 11:53:08

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

使用在Passenger中运行的Rails 3.0.3,我们遇到的问题是每个请求都保留了最后一个闪存集。例如,如果用户需要在之前的过滤器中登录,我们将设置一条Flash消息:

def require_user
    unless current_user
        store_location
        flash[:notice] = "You must be logged in to access this page"
        redirect_to login_url
        return false
    end
end

但是,在用户成功登录后的任何后续请求中,我们仍然会保持Flash消息的持续存在,它永远不会清除整个会话。

在这个示例中,这是我们设置此消息的唯一位置,并且我确保仅在用户未登录时才设置它。事实上,如果我在除非块刷新后放置flash[:notice] = 'Test'并且然后删除该行,并为所有后续请求保留“测试”Flash消息。

如果您在开发或生产环境中运行应用程序,就会发生这种情况。

2 个答案:

答案 0 :(得分:1)

我们有一个Hash#symbolize_keys!的自定义覆盖从一些旧代码中徘徊,看起来当cookie中间件在cookie上调用symbolize_keys!时,它会导致重新应用闪存在请求结束时。

我怀疑其他人是否会遇到这个问题,但在我们的案例中,这就是问题所在。

答案 1 :(得分:0)

每次请求开始时都会自动清除Flash消息。

您确定,如果用户未登录,您的current_user方法会返回nil吗?

您使用什么库进行用户会话管理? Devise / Authlogic还是其他?