12

サーバーへのすべてのリクエストでユーザーがログインしているかどうかを確認したいと思います。

何かのようなもの:

:before_filter verify_logged_in

すべてのコントローラー アクションとすべてのリクエストに適用されるように、その before_filter をどこに置く必要がありますか?

4

4 に答える 4

23

フィルターがすべてのアクションに適用されるようにするには、それを application_controller.rb に配置します。

于 2013-02-07T13:36:36.200 に答える
10

Application Controller は、他のすべてのクラスの基本クラスです。

このクラスにフィルターを配置すると、フローは次のように機能します。

url say of usersresource を任意のアクション say indexaction でヒットすると、次のようになります。

コントロールは最初に に移動しApplication Controllerます。そこでフィルターをチェックし、見つかった場合はフィルターメソッドを実行し、その後ユーザーコントローラーのインデックスアクションに進みます。

アプリケーション コントローラ:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :verify_logged_in

end

他のコントローラー:

class UsersController < ApplicationController

  def index

  end

上記のコードでは、他のコントローラーがアプリケーション コントローラーである親コントローラーの内容を継承していることがわかります。したがってbefore_filter、アプリケーション コントローラーを配置すると、すべてのユーザーに対して、ユーザーが各要求に対してログインしているかどうかが確認されます。

于 2013-02-07T14:21:45.773 に答える
4

基本クラス (application_controller.rb ファイル内) に before_filter を配置すると、基本クラスとそのすべての派生クラス (次のようなもの) で機能します。

class ApplicationController < ActionController::Base
  before_filter :set_locale

  def set_locale
    I18n.locale = params[:locale] or I18n.default_locale
  end
end

幸運を :-)

于 2013-02-07T17:03:54.247 に答える
0

に配置し、ApplicationControllerそこから他のすべてのコントローラーを継承します。verify_logged_inサブコントローラーの 1 つを上書きしないと、単純に機能します。

于 2013-02-07T13:37:16.380 に答える