2016-03-30 8 views
16

मैं प्रमाणीकरण के लिए चिंतन करना के साथ, एक रेल 4.2.x एप्लिकेशन है - क्या मैं कई नियंत्रकों की है।मैं कैसे एक को छोड़कर सभी नियंत्रकों और कार्यों पर चलाने के लिए एक before_action कर सकता हूँ?

मैं वसीयत authenticate_user चाहते हैं! घर नियंत्रक सूचकांक कार्रवाई को छोड़कर सभी नियंत्रकों और कार्यों पर चलाने के लिए विधि। (! बेशक, authenticate_user ही ख्याल है कि वसीयत लॉगिन की कार्रवाइयां करके जाना लेता है)

मैं सुनिश्चित कर सकते हैं कि हर नियंत्रक कार्रवाई application_controller.rb में before_action चलाता है:

class ApplicationController < ActionController::Base 
    before_action :authenticate_user! 
    ... 
end 

मैं भी एक विशिष्ट सेट प्रतिबंधित कर सकते हैं पर कार्य सभी नियंत्रकों की:

class ApplicationController < ActionController::Base 
    before_action :authenticate_user!, except: [:index] 
    ... 
end 

लेकिन मैं अभी घर/सूचकांक बनाने के लिए कैसे एक अपवाद हो करने के लिए नहीं दिख रहा है।

मैं, ज़ाहिर है, मैन्युअल before_action :authenticate_user! हर नियंत्रक को जोड़ने के लिए, और सूचकांक कार्रवाई के लिए घर नियंत्रक के लिए एक अपवाद जोड़ सकते हैं। लेकिन यह बहुत शुष्क नहीं है, और यदि मैं नए नियंत्रक जोड़ता हूं, तो मुझे उनमें से प्रत्येक को पहले से जोड़ने के लिए याद रखना होगा।

उत्तर

38

आप क्या करना है autheticate_user स्थापित करने के लिए है!

class ApplicationController < ActionController::Base 
    before_action :authenticate_user! 
    ... 
end 

और फिर तुम क्या अपने HomeController पर कि:

class HomeController < ApplicationController 
    skip_before_action :authenticate_user!, only: [:index] 
    ... 
end 

आशा यह आप में मदद मिलेगी की तरह सभी नियंत्रकों पर!

+0

सुनिश्चित करें कि आप ApplicationController में अपने before_action घोषित किया है? –

+0

कभी नहीं। समस्या यह है कि मैंने प्रमाणीकरण नियंत्रक में स्वयं की कार्रवाई से पहले नहीं छोड़ा था, इसलिए यह हमेशा कोई फर्क नहीं पड़ता कि इससे कोई फर्क नहीं पड़ता। –

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

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