登录或注销后设计重定向不适用于Rails页面缓存

时间:2013-05-15 17:51:05

标签: ruby-on-rails devise page-caching

我在Heroku的Rails应用程序中使用Devise进行身份验证。

我在登录和注销设置后重定向,就像在Devise wiki中建议的那样。 (https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update

application_controller.rb:

after_filter :store_location

def store_location
  # store last url as long as it isn't a /users path
  session[:previous_url] = request.fullpath unless (request.fullpath =~ /\/users\/sign_in/ || request.fullpath =~ /\/users\/sign_out/ || request.fullpath =~ /\/users\/sign_up/ || request.fullpath =~ /\/users\/edit/ || request.fullpath =~ /\/ajax_utilities/ || request.fullpath =~ /\/assets/)
end

def after_sign_in_path_for(resource)
  session[:previous_url] || root_path
end

def after_sign_out_path_for(resource)
  session[:previous_url] || root_path
end

重定向工作正常,直到我使用以下代码启用页面缓存:

class AboutController < ApplicationController

  def index
      expires_in 1.minutes, public: true
  end

end

我99%确定没有调用store_location,因为在Rails中页面缓存的工作方式甚至无法访问应用程序控制器,因为Rack在不触及Rails的情况下提供静态HTTP。

有没有人对我如何利用Rails页面缓存有任何想法,同时在登录/注销后我的重定向正确地为Devise工作?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

AboutController

中尝试使用之前的过滤器
before_filter :destroy_cache

def destroy_cache
  response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
  response.headers["Pragma"] = "no-cache"
  response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end

不确定它到底是什么,但也许是一个起点

请查看此post和原始citation

更新:

看看这个article。它将显示如何设置友好的转发,这听起来像你想要做的