Rails 与 Alchemy - 正确设置 Cache-Control header

Rails with Alchemy - properly set Cache-Control header

我有一个带有 Devise 和 Alchemy CMS 的应用程序,当我登录时,登录按钮应该更改为注销,但事实并非如此。我认为启用了 HTTP 缓存。如果我注销,我会被重定向到主页,并且在请求 header 中我可以看到:

/users/sign_out

Status Code: 302
cache-control:no-cache

但是如果我转到另一个页面,按钮仍然显示“注销”。 如果我刷新主页,我会在 header:

中看到这个

/

Request Method:GET
Status Code:200  (from disk cache)
cache-control:public
last-modified:Mon, 17 Dec 2018 19:32:08 GMT

如果我登录并转到另一个页面,按钮会显示“登录”。在 header 我看到这个:

/some/other/url

Request Method:GET
Status Code:200  (from disk cache)
cache-control:public
last-modified:Mon, 17 Dec 2018 19:32:08 GMT

有什么办法可以解决这个问题吗?

我必须升级到 4.0-stable,它将 must_revalidate 添加到 headers 并覆盖 render_fresh_page? 方法 https://github.com/AlchemyCMS/alchemy_cms/blob/4.0-stable/app/controllers/alchemy/pages_controller.rb#L192

看起来像这样:

app/controllers/alchemy/pages_controller_extension.rb

Alchemy::PagesController.class_eval do
  def render_fresh_page?
    flash.present? || !@page.cache_page? || stale?(etag: page_etag,
      last_modified: @page.published_at,
      public: !@page.restricted,
      template: 'pages/show')
  end
end