0

假设我有一大堆路线,我只想让登录用户访问。我可以检查每个控制器方法,这些方法说的是

if signed_in?
    #do stuff here
else
    redirect_to root_path

我想我也可以before_filter在控制器中使用 a 来减少我需要重写它的次数(尽管我对语法并不十分熟悉)。但是,理想情况下,我希望将它写在一个地方,匹配某个正则表达式的所有路由都需要通过此检查,例如,所有形式的路由都www.mysite.com/admin/...需要此验证检查。有什么办法可以做到这一点,所以我只需要编写一次此检查,而不是在我的控制器之间重复代码吗?

4

1 回答 1

0

我发现一篇文章展示了如何在控制器中获取当前 URL:如何在 Rails 中找出当前路由?

现在您可以编写一个方法,在ApplicationController该方法中检查 URL 是否以开头/admin并验证用户是否已登录。before_filterApplicationController. 现在这个方法会在每次请求之前被调用,但是由于你先检查正则表达式,它不会对不以 . 开头的页面产生任何影响/admin

它可能看起来类似于:

class ApplicationController < ActionController::Base
  before_filter :check_login_if_admin_route

  def check_login_if_admin_route
    current_uri = request.env['PATH_INFO']
    if !current_uri.start_with?('/admin')
      redirect_to root_path
    end
  end
end
于 2013-07-07T20:33:10.807 回答