2010-07-06 31 views
5

में उपलब्धता और आरक्षित उपयोगकर्ता नामों की जांच कैसे करें मेरे पास एक पंजीकरण पृष्ठ है जो उपयोगकर्ता को उपयोगकर्ता नाम और ईमेल पता दर्ज करने के लिए कहता है।CouchDB

मुझे यह देखने के लिए जांचना होगा कि उपयोगकर्ता नाम + ईमेल उपलब्ध है या नहीं। मैं इसे केवल एक HTTP अनुरोध के साथ कैसे करूं?

बीटीडब्ल्यू, उपयोगकर्ता नाम को डॉकिड के रूप में उपयोग किया जाता है।

मैं अभी क्या कर रहा हूं यह देखने के लिए जांच कर रहा है कि क्या दस्तावेज़ मौजूद है या नहीं, फिर ईमेल पते की उपलब्धता की जांच करने के लिए एक दृश्य का उपयोग करके, लेकिन यह 2 HTTP अनुरोध है।

मैंने कुंजी के रूप में [उपयोगकर्ता नाम, ईमेल] को उत्सर्जित करने और "कुंजी" param = [उपयोगकर्ता नाम, ईमेल] के साथ दृश्य को देखने के लिए एक दृश्य का उपयोग करने के बारे में सोचा। लेकिन अगर उपयोगकर्ता नाम और ईमेल अलग-अलग मौजूदा उपयोगकर्ताओं से संबंधित है तो यह काम नहीं करेगा।

+0

[डुचडब में अद्वितीय बाधाओं] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1541239/unique-constraints-in-couchdb) – Flimzy

उत्तर

1

जेसन। सैम का समाधान काफी उपयोगी है हालांकि आप कहते हैं, यह आपके लिए एकदम सही फिट नहीं हो सकता है। मैं दो अन्य विकल्पों के बारे में सोच सकता हूं।

एक पल के लिए नाटक करें कि आप SQL में वापस आ गए हैं। उपयोगकर्ता की प्राथमिक कुंजी क्या है? यह न तो उपयोगकर्ता नाम और न ही ईमेल बल्कि दोनों कॉलम है। कॉच डीबी के लिए वही।

तो, पर विशिष्टता की गारंटी देता है, उत्तर सरल है: यह दस्तावेज़ _id होना चाहिए। उदाहरण के लिए, उपयोगकर्ता के लिए ईमेल के साथ "जेसन" "[email protected]", पोस्ट इस दस्तावेज़ के लिए:

{ "_id": "jason:[email protected]", 
    "other stuff": "blah blah blah" 
} 

एक परमाणु, व्यवहार, उपयोगकर्ता का बनाया है। यह हो सकता है:

  • सफल है, इसलिए अब आप अपने नए उपयोगकर्ता दस्तावेज़
  • विफल चाहिए, क्योंकि उसी आईडी पहले से ही मौजूद है और आप (जानबूझकर) _rev संपत्ति भूल गया। बढ़िया, वह उपयोगकर्ता/ईमेल कॉम्बो पहले ही लिया जा चुका है!
बेशक

, बस जांच अगर नाम उपलब्ध है आप कर सकते हैं GET /db/jason:[email protected] करने के लिए। (आप _users डेटाबेस जैसे आईडी को उपसर्ग कर सकते हैं, जैसे users:jason:[email protected] — यह आपके ऊपर है।) फिर आप इसे बाद में POST कर सकते हैं। इस समय एक मौका लिया जाएगा, लेकिन यह सामान्य है कि "पहले जांचें, बाद में आरक्षित करें" फॉर्म जो वेब पर काफी आम हैं।

दूसरा विचार आपकी स्थिति के बारे में सावधानी से सोचने के लिए और अधिक है। आपने कहा कि दो उपयोगकर्ताओं के पास समान उपयोगकर्ता नाम और ईमेल हो सकता है। यह अजीब लगता है। शायद मैं गलत पढ़ा।

  • लगभग कोई भी नहीं शेयरों किसी और के साथ एक ईमेल खाते: यहां कुछ ऐसी चीजों के बारे में सोचने के लिए कर रहे हैं। वास्तविक लॉगिन नाम क्यों न बनाएं? यह फेसबुक के लिए काफी अच्छा है। फिर "उपयोगकर्ता नाम" सिर्फ उपयोगकर्ता का उपनाम हो सकता है या सिस्टम के भीतर संभाल सकता है, केवल उपयोगकर्ता दस्तावेज़ में एक संपत्ति।
  • दो HTTP अनुरोध खराब नहीं हो सकते हैं।मैं इस तरह से इसके बारे में सोचो:
    • यह एक 3-स्तरीय संरचना (समर्पित वेब सर्वर, CouchDB बैकएंड) है, तो दो HTTP अनुरोध कोई बड़ी समस्या नहीं
    • यदि यह एक 2 स्तरीय या संकर है (जहां ब्राउज़र सीधे couchdb मारा), तो CouchDB book में वर्णित प्रमाणीकरण के लिए CouchDB का उपयोग करने पर दृढ़ता से विचार करें। कॉच डीबी आपके लिए एक फॉर्म या AJAX के साथ लॉग इन संभाल सकता है। यह हर परिस्थिति के लिए बिल्कुल सही नहीं है लेकिन आपको बहुत अच्छा धन मिलता है।
+0

पीएस क्या आप वास्तव में [email protected] के मालिक हैं? भाग्यशाली कमीने! : पी – JasonSmith

+0

इस तरह के एक प्राचीन प्रश्न का जवाब देने के लिए मेरी माफ़ी, लेकिन मुझे एक ही सवाल का सामना करना पड़ रहा है। "वास्तविक लॉगिन नाम क्यों नहीं बनाते? यह फेसबुक के लिए काफी अच्छा है।" 1) फेसबुक ऐसा नहीं करता है। फेसबुक अद्वितीय संख्यात्मक आईडी का उपयोग करता है, जिसमें ईमेल पते, नाम, उपनाम * और * उनके साथ जुड़े उपयोगकर्ता नाम हैं। 2) ईमेल पते अक्सर बदल जाते हैं। – Flimzy

0

आप

http://localhost:5984/yourdatabase/_design/viewname/_view/viewid?key=["username","password"] 

साथ अपने URL पारित कर सकते हैं कि डेटा वापस आ जाएगी अगर एक ही उपयोगकर्ता नाम और पासवर्ड अपने दस्तावेज़ में मौजूद हैं।