我想驗證用戶是否登錄到服務器的每一個請求。如何將before_filter應用於Rails 3.2.11中每個控制器的每個動作?
喜歡的東西:
:before_filter verify_logged_in
我應該在哪裏把那個的before_filter所以它適用於所有的控制器操作和所有的請求?
我想驗證用戶是否登錄到服務器的每一個請求。如何將before_filter應用於Rails 3.2.11中每個控制器的每個動作?
喜歡的東西:
:before_filter verify_logged_in
我應該在哪裏把那個的before_filter所以它適用於所有的控制器操作和所有的請求?
要確保過濾器適用於所有操作,請將其放入application_controller.rb中。
將它放在ApplicationController
中,並從中繼承所有其他控制器。如果您不在其中一個子控制器中覆蓋verify_logged_in
,它就可以工作。
應用程序控制器是所有其他類的基類。
如果你把任何過濾器在這個類中,則流程如下:
如果碰到任何行動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
放在應用程序控制器中,那麼對於每個用戶,都會驗證用戶是否爲每個請求登錄。在基類
當我使用像omniauth這樣的不使用我的應用程序控制器進行操作的庫時,我該做什麼? – panzi
放的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
好運:-)
如果喲想要什麼添加一個除了那個過濾器?你將如何運行所有控制器中的所有操作的過濾器,除了讓我們說用戶控制器的索引操作? @David Hahn – Cas
你可以在用戶控制器中添加:'skip_before_filter:verify_logged_in,:except => [:index]'。 –