Authentication Rails 3检查是否在所有与regex匹配的路由上登录?
假设我有一大堆路由,我只希望登录用户可以访问这些路由。我可以检查每一个控制器方法,这些方法都是按照Authentication Rails 3检查是否在所有与regex匹配的路由上登录?,authentication,ruby-on-rails-3.2,Authentication,Ruby On Rails 3.2,假设我有一大堆路由,我只希望登录用户可以访问这些路由。我可以检查每一个控制器方法,这些方法都是按照 if signed_in? #do stuff here else redirect_to root_path 我想我也可以在控制器中使用前置过滤器,以减少重写该过滤器的次数(尽管我现在还不太熟悉语法)。然而,我理想的情况是将其写在一个地方,即所有与某个正则表达式匹配的路由都需要通过此检查,例如,所有形式为www.mysite.com/admin/…的路由都需要此验证检查。有没有
if signed_in?
#do stuff here
else
redirect_to root_path
我想我也可以在控制器中使用
前置过滤器,以减少重写该过滤器的次数(尽管我现在还不太熟悉语法)。然而,我理想的情况是将其写在一个地方,即所有与某个正则表达式匹配的路由都需要通过此检查,例如,所有形式为www.mysite.com/admin/…
的路由都需要此验证检查。有没有办法做到这一点,这样我只需写一次检查,而不必在我的控制器上重复代码?我找到一篇文章,展示了如何在控制器中获取当前URL:
现在,您可以在ApplicationController
中编写一个方法,检查URL是否以/admin
开头,并验证用户是否已登录。在ApplicationController
的过滤器之前调用该方法。现在,每个请求之前都会调用此方法,但由于您首先检查正则表达式,因此它不会对不以/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
class ApplicationController