2015-09-24 6 views
7

मेरे पास एकीकरण के डिजाइन से संपर्क करने के तरीके पर एक प्रश्न है। मेरे पास दो मॉडल Company और User हैं। मेरे मामले में, उपयोगकर्ता मेरे ऐप के लिए पंजीकरण करेंगे और फिर ऐप को अपने अलग-अलग खातों (ट्विटर, फेसबुक और लिंक्डइन) से जोड़ने के विकल्प के साथ प्रस्तुत किए जाएंगे ताकि वे पोस्ट/ट्वीट/आदि देख सकें/बना सकें। क्योंकि Companyhas_manyUsers और सोशल मीडिया खाते कंपनी से संबंधित हैं, मैं क्रेडेंशियल्स को Company पर क्रेडेंशियल को संग्रहीत करने के लिए Provider नामक किसी अन्य मॉडल का उपयोग करके क्रेडेंशियल्स को जोड़ना चाहता हूं, इसलिए किसी भी उपयोगकर्ता को कंपनी के सोशल मीडिया खाते तक पहुंचने की अनुमति है।रेल 4 डिवाइस ओमनीउथ उपयोगकर्ता के साथ जुड़े मॉडल से बंधे कई प्रदाताओं के साथ

मैं एकाधिक omniauth प्रदाताओं को कॉन्फ़िगर करने के तरीके पर विभिन्न ट्यूटोरियल का पालन कर रहा हूं, लेकिन वे सभी उपयोगकर्ता मॉडल पर उन्हें जोड़ने पर ध्यान केंद्रित करते हैं और मुझे अपने उपयोगकर्ता मॉडल में devise :omniauthable जोड़ने के लिए कहते हैं।

मैं उपयोगकर्ता के बजाय Company omniauthable कैसे बना सकता हूं? क्या मुझे अपने मॉडल को सर्वव्यापी बनाने की भी आवश्यकता है यदि मैं उपयोगकर्ता प्रमाणीकरण/पंजीकरण दृश्य omniauth की अनुमति नहीं दे रहा हूं?

यह मेरी पहली बार सोशल मीडिया एकीकरण का निर्माण है, इसलिए मुझे उम्मीद है कि मेरा प्रश्न समझ में आता है। धन्यवाद!

उत्तर

0

बहुत सोचा जाने के बाद, मैं एक ऐसे दृष्टिकोण के साथ आया जो काफी अच्छी तरह से काम करता है और जो मूल रूप से प्रयास कर रहा था उससे कहीं अधिक सरल है। यह एक हैक की तरह लगता है, इसलिए मैं निश्चित रूप से यह देखने के लिए खुला हूं कि किसी के पास क्लीनर दृष्टिकोण है या नहीं।

पहली बात मैंने कंपनी मॉडल को सर्वव्यापी बनाने के लिए छोड़ना था, क्योंकि मैं नहीं चाहता था कि उपयोगकर्ता एक कंपनी के रूप में लॉग इन करें, बल्कि एक कंपनी के उपयोगकर्ता के रूप में। इसके बजाए, मैंने उपयोगकर्ता मॉडल को सर्वव्यापी बनाया और फिर Identity मॉडल बनाया, जो उपयोगकर्ता और कंपनी belongs_to है। User और Companyhas_oneIdentity दोनों। एक बार जब कोई उपयोगकर्ता प्रदाता को अधिकृत करता है, तो एक नई पहचान बनाई जाती है।

क्योंकि उपयोगकर्ता और कंपनी दोनों की पहचान है, अन्य उपयोगकर्ता belong_to कंपनी कंपनी के माध्यम से उस पहचान तक पहुंच सकती है। इसी तरह, यदि कोई उपयोगकर्ता लॉग इन करता है और उसके पास कोई पहचान नहीं है, तो सिस्टम जांच करेगा कि क्या उनकी कंपनी को एक जोड़ने की अनुमति देने से पहले उनकी पहचान है या नहीं। इस तरह, प्रति कंपनी प्रति प्रदाता केवल एक ही पहचान है, और इससे कोई फर्क नहीं पड़ता कि कौन सा उपयोगकर्ता इसे बनाता है।

2

मेरे पास इस काम के समान कुछ है। हमारे पास एक ऐसा ऐप है जो ओबीएनयूथ का उपयोग करता है और एफबी, एलआई और ट्विटर से ओथ पहचान की अनुमति देता है। मैं Devise और Omniauth को उपयोगकर्ता मॉडल से बंधे रखता हूं और एक पहचान मॉडल है जिसमें एक प्रदाता फ़ील्ड, यूयूआईडी और उपयोगकर्ता_आईडी संबंध है। प्रदाता या सक्रिय सत्र से लौटाए गए ईमेल का उपयोग करके मैं यह निर्धारित कर सकता हूं कि उपयोगकर्ता सिस्टम में पहले से मौजूद है या नहीं और उसके अनुसार पहचान को लिंक करें। ट्विटर के साथ थोड़ा मुश्किल है क्योंकि वे एक ईमेल वापस नहीं करते हैं, इसलिए आपको यह निर्धारित करने के लिए जोड़ना होगा कि उपयोगकर्ता के पास सत्यापित ईमेल है या नहीं और यदि उन्हें आपको एक के लिए संकेत देने की आवश्यकता नहीं है। आप कंपनी मॉडल को सर्वव्यापी और devise_authentcatable बनाकर निश्चित रूप से वही कर सकते हैं लेकिन यह थोड़ा सा counterintuitive लगता है। मैं मानक उपयोगकर्ता दृष्टिकोण का उपयोग करता हूं और उपयोगकर्ता के पास एक या अधिक कंपनियां हैं। उम्मीद है की यह मदद करेगा।

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