2011-01-25 6 views
22

मेरे आवेदन में, मेरे पास एक "उपयोगकर्ता" तालिका है जिसमें निम्नलिखित संरचना है।सामाजिक लॉगिन कार्यान्वयन के लिए डेटाबेस संरचना?

CREATE TABLE IF NOT EXISTS `users` (
    `userId` int(10) unsigned NOT NULL auto_increment, 
    `username` varchar(128) NOT NULL default '', 
    `password` varchar(32) NOT NULL default '', 
    `email` text NOT NULL, 
    `newsletter` tinyint(1) NOT NULL default '0', 
    `banned` enum('yes','no') NOT NULL default 'no', 
    `admin` enum('yes','no') NOT NULL default 'no', 
    `signup_ip` varchar(20) NOT NULL default '', 
    `activation_key` varchar(60) NOT NULL default '', 
    `resetpassword_key` varchar(60) NOT NULL default '', 
    `createdon` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`userId`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ; 

मैं अपने आवेदन में फेसबुक, ट्विटर और OpenID के माध्यम से सामाजिक लॉगिन लागू करना चाहते हैं, जैसे StatckOverflow किया था। कृपया मुझे बताएं कि मेरे डीबी में मुझे क्या बदलाव होगा और मौजूदा लॉगिन सुविधा के साथ-साथ PHP में तर्क कैसे लागू किया जाएगा।

धन्यवाद! पहले स्पष्टीकरण के लिए

उत्तर

23

मेरा सुझाव है कि आप एक AuthenticationProvider का सिद्धांत प्रारंभ:

CREATE TABLE IF NOT EXISTS `AuthenticationProvider` (
`ProviderKey` varchar(128) NOT NULL, 
`userId` int(10) unsigned NOT NULL, 
`ProviderType` enum('facebook','twitter', 'google') NOT NULL, 
PRIMARY KEY (`ProviderKey`)) 
ENGINE=MyISAM DEFAULT CHARSET=latin1; 

प्रत्येक लॉगिन प्रदाता उपयोगकर्ता के लिए एक अद्वितीय कुंजी प्रदान करता है। यह ProviderKey में संग्रहीत है। ProviderType में इस लॉगिन प्रदाता के बारे में जानकारी है कि यह ProviderKey संबंधित है, और अंत में, userId कॉलम users तालिका के साथ जानकारी जोड़ता है। इसलिए जब आप लॉगिन प्रदाताओं में से एक से एक सफल लॉगिन प्राप्त करते हैं तो आपको तालिका में संबंधित ProviderKey मिलते हैं और उपयोगकर्ता के प्रश्न के लिए प्रमाणीकरण कुकी सेट करते हैं।

मुझे यकीन नहीं है कि आप ProviderTypeenum बनना चाहते हैं। यह शायद एक और टेबल बनाने के लिए और अधिक सही होगा जो इन्हें पकड़ सकता है।

जब कोई उपयोगकर्ता आपकी साइट के साथ पहले पंजीकरण करता है, और फेसबुक के माध्यम से लॉग इन करता है, उदाहरण के लिए, आपको users तालिका में एक पंक्ति बनाना होगा। हालांकि, password, activation_key और resetpassword_key शामिल नहीं होंगे। तो आप उन फ़ील्ड को एक अलग तालिका में ले जाना चाहते हैं, जैसे कि आपकी users तालिका में केवल मूल उपयोगकर्ता डेटा है, और कोई भी डेटा जो केवल एक लॉगिन तंत्र (उपयोगकर्ता नाम/पासवर्ड) के लिए प्रासंगिक नहीं है।

मुझे उम्मीद है कि यह समझ में आता है और यह आपको सही दिशा में इंगित करता है।

/क्लॉस

+2

क्या होगा यदि फेसबुक और ट्विटर के उपयोगकर्ता की एक ही कुंजी है? –

+1

प्रदाता टाइप का उपयोग –

+0

@EjazKarim को अलग करने के लिए किया जा सकता है, ये चाबियाँ अनुक्रमिक नहीं हैं, इसलिए यदि ट्विटर के डेटाबेस में उपयोगकर्ता के लिए फेसबुक के डेटाबेस के समान कुंजी है, तो मुझे लगता है कि हम दौड़ना शुरू कर सकते हैं। – Machado