2009-10-08 4 views
7

यह एक डेटाबेस प्रश्न है। मेरे पास पहले से स्थापित और काम कर रहे एक ओपनिड लाइब्रेरी है।डेटाबेस में ओपनआईडी जानकारी संग्रहीत

मैं ओपनआईडी का उपयोग उस वेबसाइट पर करना चाहता हूं जिस पर मैं काम कर रहा हूं। तीन प्रकार के उपयोगकर्ता हैं।

  1. नाम ईमेल/पासवर्ड का उपयोग कर OpenID का उपयोग करते
  2. बेनामी खाते को प्रमाणित करने के लिए OpenID का उपयोग करते
  3. नाम खातों का प्रमाणीकरण करने खातों का प्रमाणीकरण करने

इन उपयोगकर्ताओं के सभी के लिए एक ही तालिका में जमा हो जाती है बस टिप्पणी तालिका। नामित खाते एक ब्लॉग से जुड़े होते हैं जो खाता प्रबंधित कर सकता है। बेनामी उपयोगकर्ता ब्लॉग पर लेखों पर टिप्पणी कर सकते हैं लेकिन वे कुछ भी नहीं कर सकते हैं। यदि कोई अज्ञात उपयोगकर्ता किसी खाते के लिए साइन अप करता है तो मैं उस उपयोगकर्ता की पुरानी टिप्पणियों को स्वचालित रूप से नामित खाते में स्थानांतरित करना चाहता हूं। मैं वर्तमान में उपयोगकर्ताओं को एक अद्वितीय नाम और वैध ईमेल के साथ एक फॉर्म भरकर कर रहा हूं।

वर्तमान में दोनों स्कीमा का उपयोग करके एक ही तालिका में खातों के दोनों सेट संग्रहीत किए जाते हैं।

मैं इस का उपयोग कर रहा है (एक रेल प्रवास हाँ, यह है)

create_table :users do |t| 
    t.string :name #unique because it maps to a subdomain 
    t.string :openid_url #unique 
    t.string :email #unique 
    t.string :password_hash 
    t.string :password_salt 
    t.boolean :guest #Anonymous user flag 

    t.timestamps 
end 

(क्योंकि उपयोगकर्ताओं को ईमेल/पासवर्ड के साथ प्रवेश openid_url ही openid के साथ संलग्न कर से अनेक खातों को रोकने के लिए अद्वितीय है। email अद्वितीय है) सेटअप मैंने Google के ओपनआईडी कार्यान्वयन के साथ एक समस्या में भाग लिया है। प्रत्येक उपयोगकर्ता जो ओपनआईडी के लिए Google का उपयोग करता है, वही यूआरएल है: https://www.google.com/accounts/o8/ud

मैं Google को ओपनिड प्रदाता के रूप में उपयोग करने का समर्थन कैसे करूं क्योंकि यह यूआरएल प्रत्येक उपयोगकर्ता के लिए अद्वितीय नहीं है? (कृपया मौजूद बाधाओं को याद रखें)

नोट: Google खाते इंटरनेट पर किसी भी वैध ईमेल पते का उपयोग कर सकते हैं, इसलिए मैं openid_url फ़ील्ड में [email protected] को स्टोर नहीं कर सकता क्योंकि ईमेल व्यक्ति @ उदाहरण हो सकता है। कॉम या बदतर [email protected]! याहू भी इस एकल यूआरएल विधि का उपयोग करता है इसलिए मुझे भी उनका समर्थन करना होगा।

+0

आप क्यों कहते हैं कि ईमेल पते अद्वितीय हैं? वे नहीं हो सकते हैं। क्या होगा यदि आप एक दूसरा ओपनिड लॉग देखते हैं और उपयोगकर्ता आपके पास पहले से ही एक ही ईमेल पते का दावा करता है? –

+0

ईमेल नामित खातों के लिए ओपनिड का उपयोग नहीं कर रहा है। मैंने बाद में ओपनिड का उपयोग करने के लिए अपना आवेदन बदल दिया है। (मुझे लगता है कि पर्याप्त लोगों के पास google/yahoo खाते हैं जिनके साथ मुझे कोई समस्या नहीं होगी।) – epochwolf

उत्तर

8

openid.claimed_id मान स्टोर करें। यह प्रति उपयोगकर्ता अद्वितीय है। Google ओपनआईडी वास्तव में अद्वितीय हैं। वे सभी एक ही मूल्य से शुरू होते हैं, लेकिन उनके पास अद्वितीय ?id=uniquenesshere क्वेरीस्ट्रिंग्स हैं। याद रखें कि इन मानों को केस संवेदनशील माना जाना चाहिए, इसलिए उपयोगकर्ताओं को ढूंढते समय केस और मैच को सुरक्षित रखें।

आप निश्चित रूप से ईमेल पते को आपके द्वारा दिए गए कारणों के लिए अद्वितीय नहीं मानना ​​चाहते हैं, साथ ही अधिकांश प्रदाताओं के लिए ईमेल पता पूर्व-सत्यापित नहीं है (या आप प्रदाता को ऐसा करने पर भरोसा नहीं कर सकते हैं) ईमेल पते पर संग्रहीत करना आपके उपयोगकर्ताओं की पहचान चोरी करने का एक निश्चित तरीका है।

-1

openid_url की आवश्यकता नहीं है। केवल उपयोगकर्ता आईडी या नाम (अद्वितीय) दोनों खाते के लिए काम करता है। आप UserAccount तालिका से ओपनिड और उपयोगकर्ता आईडी के साथ अलग तालिका भी बना सकते हैं।