2011-05-17 19 views
10

मैं before_filter :authenticate_user! में बनाया गया डेविस का उपयोग कर रहा हूं। यदि कोई उपयोगकर्ता फ़िल्टर से पहले विफल रहता है (लॉग आउट होने पर कोई कार्रवाई करने का प्रयास करता है) तो मैं अपने एप्लिकेशन सहायक में अपनी खुद की कस्टम विधि कॉल करना चाहता हूं। मैं यह कैसे और कहां कर सकता हूं?पूर्वाग्रह के साथ पहले_फिल्टर

+0

आप प्राधिकरण के लिए कैनकन का उपयोग करने में लग रहे हैं। –

उत्तर

6

मैं user_signed_in? का उपयोग करने वाले फ़िल्टर से पहले एक कस्टम लिखूंगा। यह सिर्फ एक बूलियन लौटाएगा, और authenticate_user! करता है कि किसी भी रीडायरेक्ट-प्रकार क्रियाओं को नहीं करता है।

तो, अगर आप इस तरह फिल्टर से पहले एक लिख सकते हैं:

before_filter :custom_user_auth 
... 
def custom_user_auth 
    unless user_signed_in? 
     # Do custom stuff, ultimately restricting access to the 
     # ...protected resource if it needs to be 
    end 
end 

ध्यान दें कि इस फिल्टर से पहले अनधिकृत उपयोगकर्ताओं से अपने संसाधन रक्षा नहीं करेंगे जब तक कि unless बयान के अंदर क्षेत्र पुनर्निर्देश या बना देता है।

+0

क्या मैं अपने एप्लिकेशन नियंत्रक में विधि डाल सकता हूं? – user730569

+0

यदि आप एकाधिक नियंत्रकों में पहले फ़िल्टर का उपयोग करने की योजना बना रहे हैं, जिनमें से प्रत्येक एप्लिकेशन कंट्रोलर का विस्तार करता है, तो मैं वहां फ़ंक्शन को परिभाषित करता हूं। हालांकि, मैं निश्चित रूप से एप्लिकेशन नियंत्रक में 'pre_filter' लाइन नहीं डालूंगा, क्योंकि आप शायद कुछ ही मामलों में इसका उपयोग करना चाहते हैं। – andrewmitchell

7

before_filter :authenticate_user! पर कॉल करने के बजाय अपने नियंत्रक में अपना स्वयं का फ़ंक्शन लिखें जो authenticate_user! पर कॉल करता है। कुछ ऐसा:

before_filter :logged_in 

... 

private 
def logged_in 
    your_function 
    authenticate_user! 
end