9

का उपयोग कर ओथ अधिकृत अनुप्रयोगों को जोड़ने के लिए वेब इंटरफ़ेस तक पहुंच प्रतिबंधित करने के लिए कैसे करें मेरे पास एक रेल एप्लिकेशन है जो डिवाइस + डोरकीपर का उपयोग करता है। मैं रोल प्रबंधन के लिए भी कैनकन का उपयोग कर रहा हूं। मेरे आवेदन में मैं पंजीकरण के लिए http://localhost:3000/oauth/applications/new का उपयोग करता हूं क्लाइंट और सीक्रेट आईडी प्राप्त करने के लिए मेरा आवेदन। वर्तमान में कोई भी ग्राहक क्लाइंट और गुप्त आईडी प्राप्त करने के लिए वेब इंटरफ़ेस के माध्यम से एप्लिकेशन पंजीकृत कर सकता है, मुझे एक्सेस प्रतिबंधित करना होगा ताकि केवल व्यवस्थापक ही पंजीकरण कर सके।रेल 3: Doorkeeper मणि

मैं doorkeeper.rb फ़ाइल

# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below. 
    # admin_authenticator do 
    # # Put your admin authentication logic here. 
    # # Example implementation: 
    # Admin.find_by_id(session[:admin_id]) || redirect_to(new_admin_session_url) 
    # end 

मैं नीचे की तरह कोशिश की, लेकिन काम नहीं कर में कुछ कोड देखा ...

admin_authenticator do 
    if(current_user) 
    current_user.role? :admin 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

अग्रिम धन्यवाद ......

+0

यह एक बग लगता है, जिथब पेज पर कोई समस्या पोस्ट करें: https://github.com/applicake/doorkeeper –

+0

मैंने इस तरह की कोशिश की है, और यह काम करता है ........ admin_authenticator redirect_to (new_user_session_url) जब तक (current_user.role? : व्यवस्थापक) अंत – Cyber

+0

क्या आपने अभी शून्य की वापसी की कोशिश की है? तो, इस तरह कुछ: 'admin_authenticator {nil}'। देखें कि यह क्या करता है, यदि आप अभी भी/oauth/अनुप्रयोगों तक पहुंच सकते हैं तो यह एक बग – Max

उत्तर

5

खैर , आपका तर्क गलत है। असल में आप उन सभी को दे रहे हैं जो current_user के पास पहुंच है।

admin_authenticator do 
    if(current_user && current_user.role?(:admin)) 
    #do nothing 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

तुम भी

admin_authenticator do 
    if(current_user) 
    redirect_to(not_authorized_url) unless current_user.role?(:admin) 
    else 
    redirect_to(new_user_session_url) 
    end 
end 

जो तुम सही त्रुटि पृष्ठ पर उपयोगकर्ता भेजने होगा

7

कोड मैं का इस्तेमाल किया और अच्छा काम करता है

है कर सकता है: आप वास्तव में कुछ की तरह चाहते हैं
admin_authenticator do 
    redirect_to new_user_session_url unless current_user && current_user.admin? 
end 
+2

लगता है शायद एक बेहतर 'redirect_user_session_url' current_user.try (: admin?) तक है, लेकिन मैंने इसका परीक्षण नहीं किया है – coorasse

+0

यह एक सही है :) –

+1

'redirect_toer_session_url को पुनर्निर्देशित करें जब तक current_user.try (: admin?)' काम करता है। – StarWars