2012-10-28 14 views
6

के लिए लोड किए गए प्रदाताओं को ढूंढें मैं जानना चाहता हूं कि OmniAuth gem द्वारा उपयोग के लिए कौन से प्रदाताओं को लोड किया गया है।OmniAuth

OmniAuth::Strategies.constants # a method provided by the standard lib Module class 
# => [:Developer, :OAuth, :Twitter] 

और इस:

OmniAuth.strategies.inspect # a method provided by the OmniAuth class, but which has no documentation or comments around it. 
# => [OmniAuth::Strategies::OAuth] 

जवाब मैं उम्मीद थी (या चाहते हैं) [:Developer, :Twitter] अपने परीक्षण कोड में के रूप में मैं केवल स्पष्ट रूप से चहचहाना लोड कर दिया है, और मैं इस की कोशिश की है प्रदान किया गया डेवलपर डिफ़ॉल्ट रूप से लोड किया जाता है।

(यह सभी है तो एक अलग पुस्तकालय सही बातें यह काम करने के लिए, क्या OmniAuth चल रहा है पर निर्भर लोड कर सकते हैं।)

अगर वहाँ एक तरीका है और आप इसके बारे में पता है, तो कृपया मुझे बताएं। अन्यथा मैं व्यावहारिक होगा और ओएथ को पहले उदाहरण से सूची में से बाहर कर दूंगा।

रूबी 1.9.3 और OmniAuth v1.1.1

उत्तर

6

है OmniAuth :: रणनीतियाँ रणनीतियों उपलब्ध है और पंजीकृत सूचीबद्ध करता है। वे लोग जो 'उपयोग' में नहीं हैं। यदि आप OmniAuth builder कोड के माध्यम से खोदते हैं, तो आप देखेंगे कि use का उपयोग प्रदाता ब्लॉक में मिडलवेयर के रूप में रैक पर विभिन्न रणनीतियों को पारित किया जाता है, जो रणनीतियों को कठिन बनाते हैं। एक और "व्यावहारिक" दृष्टिकोण बंदर पैच OmniAuth बिल्डर और प्रदाताओं को ट्रैक करने के लिए है।

module OmniAuth 
    class Builder < ::Rack::Builder 
    def provider_patch(klass, *args, &block) 
     @@providers ||= [] 
     @@providers << klass 
     old_provider(klass, *args, &block) 
    end 
    alias old_provider provider 
    alias provider provider_patch 
    class << self 
     def providers 
     @@providers 
     end 
    end 
    end 
end 

अपने प्रदाताओं को कॉन्फ़िगर करने से पहले इस पैच को शामिल करें। एक बार सभी प्रदाताओं को लोड कर दिया गया है, OmniAuth::Builder.providers आपको वह सरणी देगा जो आप चाहते हैं।

हालांकि डेवलपर रणनीति उपलब्ध है, यह लोड नहीं है। यह केवल यदि आप

provider :developer 
+0

इस के साथ समय निकालने के लिए धन्यवाद, यह बहुत उपयोगी और बहुत सराहना है। – iain

15

इस यहाँ वसीयत उपयोगकर्ताओं के लिए जोड़ा जा रहा है निर्दिष्ट भरी हुई है, जैसा कि मैंने इयान रूप में एक ही सूची की जरूरत है।

मैंने रेल परियोजना में अपने devise प्रारंभकर्ता के शीर्ष पर स्वीकृत उत्तर का उपयोग करने का प्रयास किया, लेकिन मुझे एक त्रुटि मिली (@@ प्रदाताओं को परिभाषित नहीं किया गया था)।

वसीयत स्रोत कोड में देखने के बाद, मैं प्रतीकों में से एक सरणी प्राप्त करने के लिए निम्नलिखित का प्रयोग किया:

Devise.omniauth_configs.keys # => [:facebook, :twitter] 
+6

आप Devise.omniauth_providers भी उपयोग कर सकते हैं –

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