我想验证用户是否在每次请求服务器时都登录。例如:
:before_filter verify_logged_in
我应该把它放在_filter之前的哪里,这样它就可以应用于所有的控制器操作和所有的请求了?
yh2wf1be1#
要确保筛选器适用于所有操作,请将其放置在application_software. rb中。
goqiplq22#
Application Controller是所有其他类的基类。如果你在这个类中放置任何过滤器,那么流程如下:如果你点击了users资源的url,并执行了任何操作,比如index操作,那么:控制首先转到Application Controller。在那里,它检查过滤器,如果找到任何过滤器,那么它执行过滤器方法,之后它转到用户控制器的索引操作。
users
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
mefy6pfw3#
将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
祝你好运:-)
jq6vz3qz4#
将它放在ApplicationController中,并从它继承所有其他控制器。如果你不覆盖你的一个子控制器中的verify_logged_in,它就能正常工作。
ApplicationController
verify_logged_in
zaqlnxep5#
如果你希望过滤器应用于所有的动作,把它放在你的应用程序控制器继承的控制器中。(默认值为ApplicationController)
class ApplicationController < ActionController::Base before_action :authenticate_user after_action :redirect_if_deleted # [...] end
5条答案
按热度按时间yh2wf1be1#
要确保筛选器适用于所有操作,请将其放置在application_software. rb中。
goqiplq22#
Application Controller是所有其他类的基类。
如果你在这个类中放置任何过滤器,那么流程如下:
如果你点击了
users
资源的url,并执行了任何操作,比如index
操作,那么:控制首先转到
Application Controller
。在那里,它检查过滤器,如果找到任何过滤器,那么它执行过滤器方法,之后它转到用户控制器的索引操作。应用控制器:
其他控制器:
在上面的代码中,你可以看到另一个控制器继承了父控制器的内容,也就是应用程序控制器。因此,如果您将
before_filter
放在应用程序控制器中,那么对于每个用户,它都会验证用户是否在每个请求中登录。mefy6pfw3#
将before_filter放在基类中(在application_controller.rb文件中),它将在基类及其所有派生类上工作,例如
祝你好运:-)
jq6vz3qz4#
将它放在
ApplicationController
中,并从它继承所有其他控制器。如果你不覆盖你的一个子控制器中的verify_logged_in
,它就能正常工作。zaqlnxep5#
如果你希望过滤器应用于所有的动作,把它放在你的应用程序控制器继承的控制器中。(默认值为
ApplicationController
)