如何将before_filter应用于Rails 3.2.11中每个控制器的每个动作?

ser*_*erg 12 ruby authentication redirect before-filter ruby-on-rails-3

我想验证用户是否登录到服务器的每个请求.

就像是:

:before_filter verify_logged_in
Run Code Online (Sandbox Code Playgroud)

我应该在哪里放置before_filter,以便它适用于所有控制器操作和所有请求?

Dav*_*ahn 23

要确保过滤器适用于所有操作,请将其放在application_controller.rb中.

  • 您可以向用户控制器添加:`skip_before_filter:verify_logged_in,:except => [:index]`. (3认同)

My *_*God 10

Application Controller是所有其他类的基类.

如果您在此类中放置任何过滤器,则流程的工作方式如下:

如果你点击url说users资源,任何行动说index行动,那么:

控件首先进入Application Controller.在那里它检查过滤器,如果找到任何,那么它执行过滤器方法,然后它转到用户控制器的索引操作.

应用控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :verify_logged_in

end
Run Code Online (Sandbox Code Playgroud)

其他控制器:

class UsersController < ApplicationController

  def index

  end
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,您会看到另一个控制器继承了作为应用程序控制器的父控制器的内容.因此,如果您放入before_filter应用程序控制器,那么对于每个用户,它将验证用户是否已针对每个请求登录.