2011-08-11 16 views
18

के लिए cancan skip_authorization_check कैनकन साइन अप कर सकते हैं और फिर लॉग इन कर सकते हैं ... और क्योंकि उपयोगकर्ता लॉग इन करने के बाद तक भूमिकाओं के लिए पहचाना नहीं जाता है, क्या यह Devise के लिए authorization_check को छोड़ना समझ में नहीं आता है?डेविस प्रमाणीकरण

उस आधार पर जाकर, मैं इस रजिस्ट्रेशन_कंट्रोलर के साथ डेविस पंजीकरण नियंत्रक से प्राप्त करता हूं और इसे नियंत्रक निर्देशिका में रखता हूं।

class Users::RegistrationsController < Devise::RegistrationsController 
    skip_authorization_check 
end 

मार्गों फाइल करने के लिए परिवर्तन:

devise_for :users, :controllers => { :registrations => "registrations" } 

मैं हालांकि कुछ याद कर रहा हूँ:

This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check. 

आपकी मदद के लिए धन्यवाद।

+0

@RyanBigg कैनकैन डॉक्स में स्पष्ट कर दिया है, जब मैं इस मुद्दे अतीत मिलता है, मैं अगर आपका जवाब को देखने के लिए जा रहा हूँ पूर्व प्रश्न के लिए ऐप के लिए सही एक है। धन्यवाद। – Jay

+0

@ होसेमियर, दूसरे प्रश्न में आपकी सलाह का पालन करने से पहले मुझे इस मुद्दे को दूर करने की आवश्यकता है। आपकी सहायता के लिए धन्यवाद. – Jay

उत्तर

38

आसान उपाय

check_authorization :unless => :devise_controller? 

आप कुछ बिंदु आप भूल जाते हैं और अपने एप्लिकेशन में एक सुरक्षा छेद खुल जाएगा पर मैन्युअल रूप से हर नियंत्रक में check_authorization डाल करने के लिए है। स्पष्ट रूप से श्वेतसूची नियंत्रकों को बेहतर करना है जिन्हें कैनकन द्वारा ऑथ की आवश्यकता नहीं है।

इस पर

https://github.com/ryanb/cancan/wiki/Ensure-Authorization

संपादित

class ApplicationController < ActionController::Base 
    check_authorization :unless => :do_not_check_authorization? 
    private 
    def do_not_check_authorization? 
    respond_to?(:devise_controller?) or 
    condition_one? or 
    condition_two? 
    end 

    def condition_one? 
    ... 
    end 

    def condition_two? 
    ... 
    end 
end 
+0

धन्यवाद bradgonesurfing +1। जब मैं इस कोड को संशोधित करने और परीक्षण करने के लिए वापस आऊंगा, तो मैं स्वीकार्य उत्तर बदल दूंगा यदि यह सब आपके तरीके से काम करता है। – Jay

+0

उत्तर अभी भी श्री बिग के साथ है जो (-1) – bradgonesurfing

+0

पर स्कोर किया गया है समस्या यह है कि, यह है कि, डिवीज नियंत्रक के अलावा, दो अन्य नियंत्रक हैं जिन्हें मैं छोड़ना चाहता हूं। मैं उनको जोड़ने के लिए 'जब तक' स्थिति को संशोधित करने में असमर्थ रहा हूं। मैं उन में 'skip_authorization_check' डाल सकता हूं, लेकिन यह बेहतर होगा अगर ऐप में केवल एक ही स्थान था जो सभी अपवादों को संभाला था। – Jay

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