मैं "omniauth-google-oauth2" मणि के साथ रेल 4.2.5 का उपयोग कर रहा हूं। मेरे आवेदन में, उपयोगकर्ता साइन इन करने में सक्षम होंगे एकमात्र तरीका उनके Google या फेसबुक लॉगिन के माध्यम से है। मैं क्या चाहता हूं कि मेरे आवेदन को प्रारंभिक उपयोगकर्ता, मुझे (ईमेल = '[email protected] ") के साथ व्यवस्थापक भूमिका के साथ पूर्व-पॉप्युलेट करना है। यह प्रोग्रामेटिक रूप से करना अच्छा होगा ताकि जब मैं इसे अन्य वातावरण में घुमा दूं तो मैं उसी कोड का उपयोग कर सकता हूं।मैं Google उपयोगकर्ता के साथ अपने रेल 4 एप्लिकेशन को पूर्व-पॉप्युलेट कैसे करूं?
मेरे भूमिकाओं तालिका (db/seeds.rb के माध्यम से) भूमिकाओं
Admin
User
और मेरे एप्लिकेशन/मॉडल/user.rb फ़ाइल
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
है मुझे यकीन है कि कैसे करने के लिए नहीं कर रहा हूँ है जो भी मैं चाहता हूं, वही करें, और इसलिए कुछ वकील का मूल्य होगा।
हाय, यह ठीक है अगर उपयोगकर्ता को Google और फेसबुक दोनों और मेरे ऐप में एक साथ लॉग इन नहीं किया जा सकता है। मैं उलझन में हूं कि आपने उपयोगकर्ता मॉडल से self.from_omniauth को प्राधिकरण मॉडल में क्यों स्थानांतरित किया।क्या यह डुप्लिकेट उपयोगकर्ता नहीं बनते हैं यदि मेरे डेटाबेस में पहले से ही प्रदाता और यूआईडी से मेल खाता उपयोगकर्ता है? – Dave
@ डेव हां प्राधिकरण मॉडल का उद्देश्य एक ही उपयोगकर्ता के लिए एकाधिक प्रदाताओं का समर्थन करना है। इसके बिना (आपके कोड से) उपयोगकर्ता को फेसबुक और Google के साथ लॉग इन करते समय दो बार बनाया जाएगा। यह कोई बड़ा मुद्दा नहीं है, लेकिन यदि आप प्रदाता से ईमेल पुनर्प्राप्त करते हैं और उपयोगकर्ताओं को तालिका पहचानकर्ता के रूप में ईमेल करते समय स्टोर करते हैं और साथ ही यह समस्याएं भी उत्पन्न करता है। –