我想验证用户是否登录了对服务器的每个请求。
就像是:
:before_filter verify_logged_in
我应该把 before_filter 放在哪里,以便它适用于所有控制器操作和所有请求?
我想验证用户是否登录了对服务器的每个请求。
就像是:
:before_filter verify_logged_in
我应该把 before_filter 放在哪里,以便它适用于所有控制器操作和所有请求?
要确保过滤器适用于所有操作,请将其放在 application_controller.rb 中。
应用程序控制器是所有其他类的基类。
如果您在此类中放置任何过滤器,则流程如下:
如果你users
用任何动作点击资源的url sayindex
动作然后:
控制首先转到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
其中一个子控制器,它就可以正常工作。