在我的 Rails 3.1 应用程序中,我创建了一个机架中间件来验证访问权限。如果访问未被批准,用户将被重定向到页面。具体来说,这将是我在我的视图中已经拥有的页面。假设我正在尝试重定向到 dummy.html.erb 并在我的 routes.rb 中定义为
match '/dummy', to :'page#dummy'
页面是我的控制器。
我尝试了以下方法,但似乎陷入了一些重定向循环。
我的机架中间件位于 /lib :
class AccessVerifier
def initialize(app)
@app = app
end
def call (env)
#....
#....do some type of verification here and redirect if fail verification
#....
[301, {"Location" => '/dummy', "Content-Type" => "text/html"}, []]
end
end
在 application.rb 我有
config.autoload_paths += %W(#{config.root}/lib)
config.middleware.use "AccessVerifier"
我也尝试在我的中间件中调用一个控制器,但我再次陷入了一些重定向循环。我从我的中间件类中调用了控制器,如下所示:
def call (env)
...
status,headers,response=PageController.action("validateAccess").call(env)
end
在我的控制器中:
class PageController < ApplicationController
def validateAccess
redirect_to :controller => 'page', :action => "dummy"
end
...
end
我已经看到在不使用机架中间件的情况下成功完成重定向,例如仅使用控制器,但请注意,在我的应用程序运行之前,我需要在中间件中执行此操作。