我想验证用户是否在对服务器的每个请求中都登录了。
类似:
:before_filter verify_logged_in
我应该将 before_filter 放在哪里,以便它适用于所有控制器操作和所有请求?
为了确保过滤器适用于所有操作,请将其放置在 application_controller.rb 中。
Application Controller 是所有其他类的基类。
如果您在此类中放置任何过滤器,则流程将按如下方式工作:
如果您点击
users
资源的 url,并执行任何操作(例如 index
操作),则:
控件首先转到
Application Controller
。在那里它检查过滤器,如果找到任何过滤器,则执行过滤器方法,然后转到用户控制器的索引操作。
应用控制器:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :verify_logged_in
end
其他控制器:
class UsersController < ApplicationController
def index
end
在上面的代码中,您可以看到另一个控制器继承了父控制器(即应用程序控制器)的内容。因此,如果您将
before_filter
放入应用程序控制器中,那么对于每个用户,它将验证该用户是否针对每个请求登录。
将 before_filter 放在基类中(在 application_controller.rb 文件中),它将在基类及其所有派生类上工作,例如
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] or I18n.default_locale
end
end
祝你好运:-)
将其放入
ApplicationController
并从中继承所有其他控制器。如果您不在子控制器之一中覆盖 verify_logged_in
,它就会正常工作。
如果您希望过滤器适用于所有操作,请将其放在 application_controller.rb 中
'类应用程序控制器< ActionController::Base
在_action之前:验证_用户
after_action:redirect_if_deleted
...................... 结束'