2013-02-07 11 views
11

मैं यह सत्यापित करना चाहता हूं कि उपयोगकर्ता सर्वर पर प्रत्येक अनुरोध पर लॉग इन है या नहीं।रेल 3.2.11 में प्रत्येक नियंत्रक की हर कार्रवाई के लिए पहले_फिल्टर को कैसे लागू करें?

:before_filter verify_logged_in 

कहाँ मुझे लगता है कि before_filter रखना चाहिए, इसलिए वह सभी नियंत्रक कार्यों और सभी अनुरोधों पर लागू होता है:

तरह?

उत्तर

22

यह सुनिश्चित करने के लिए कि फ़िल्टर सभी कार्यों पर लागू होते हैं, इसे application_controller.rb में रखें।

+1

के रूप में, आधार और उसके सभी व्युत्पन्न वर्ग पर काम करेंगे क्या होगा अगर यो चाहते हैं उस फ़िल्टर को छोड़कर जोड़ने के लिए? उपयोगकर्ता नियंत्रक की इंडेक्स एक्शन को छोड़कर आप सभी नियंत्रकों में सभी कार्यों के लिए फ़िल्टर कैसे चलाएंगे? @ डेविड हन – Cas

+3

आप जोड़ देंगे: 'skip_before_filter: verify_logged_in,: को छोड़कर => [: अनुक्रमणिका] 'उपयोगकर्ता नियंत्रक को। –

0

इसे ApplicationController में रखें और इसके सभी अन्य नियंत्रकों को प्राप्त करें। यदि आप अपने उप-नियंत्रकों में से किसी एक में verify_logged_in को ओवरराइट नहीं करते हैं तो यह बस काम करता है।

10

आवेदन नियंत्रक अन्य सभी वर्गों का मूल वर्ग है।

आप इस वर्ग में किसी भी फिल्टर डाल तो प्रवाह इस प्रकार काम करता है:

नियंत्रण पहले Application Controller को जाता है:

यदि आप यूआरएल किसी भी कार्रवाई के साथ users संसाधन का कहना कहना तो index कार्रवाई मारा। वहां फ़िल्टर के लिए यह जांचता है, अगर कोई पाता है तो यह फ़िल्टर विधि निष्पादित करता है और उसके बाद यह उपयोगकर्ता नियंत्रक की अनुक्रमणिका कार्रवाई में जाता है।

आवेदन नियंत्रक:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :verify_logged_in 

end 

अन्य नियंत्रक:

class UsersController < ApplicationController 

    def index 

    end 

यहाँ उपरोक्त कोड में आप देखते हैं कि अन्य नियंत्रक माता पिता नियंत्रक की सामग्री को जो आवेदन नियंत्रक है इनहेरिट है । तो यदि आप एप्लिकेशन नियंत्रक में before_filter डालते हैं तो प्रत्येक उपयोगकर्ता के लिए यह सत्यापित करेगा कि उपयोगकर्ता प्रत्येक अनुरोध के लिए लॉग इन है या नहीं। आधार वर्ग में

+0

और जब मैं omniauth की तरह lib का उपयोग करता हूं तो मैं क्या करूँगा जो मेरे क्रिया नियंत्रक का उपयोग अपने कार्यों के लिए नहीं करता है? – panzi

4

डाल 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 

सौभाग्य :-)

संबंधित मुद्दे