2009-11-21 9 views
10

मैंने couchDB v 0.10.0 स्थापित किया है, और मैं couchDB विकी से डाउनलोड किए गए कोच क्लास से पायथन के माध्यम से बात करने का प्रयास कर रहा हूं। समस्या है:couchDB, पायथन और प्रमाणीकरण

Create database 'mydb': {'error': 'unauthorized', 'reason': 'You are not a server admin.'} 

मैंने अपना मानक ओएसएक्स लॉगिन और पासवर्ड शामिल करने के लिए स्थानीय.ini फ़ाइल संपादित की है। अब मुझे फ़्यूटन के माध्यम से पूर्ण पहुंच है लेकिन कोई खुशी डब्लूआरटी पायथन नहीं है। क्या यह एक http हेडर मुद्दा है?

एक नुकसान पर - धन्यवाद!

+0

आप किस पायथन पुस्तकालय का उपयोग कर रहे हैं? पाइथन विकी पेज पर कई सूचीबद्ध हैं (http://wiki.apache.org/couchdb/Getting_started_with_Python) – andyuk

+0

धन्यवाद एंड्युक - मैं विकी पेज पर मौजूद उदाहरण कोड का उपयोग कर रहा हूं क्योंकि यह सबसे आसान है। मैं कुथ डीबी को ऑथ (स्थानीय रूप से) – idiotype

उत्तर

5

उदाहरण में Couch कक्षा डेटाबेस में कोई प्रमाणीकरण जानकारी पास नहीं करती है, इसलिए यह एक चमत्कार नहीं है कि यह विशेषाधिकार प्राप्त संचालन की अनुमति नहीं देता है। तो अपने ही विकल्प हैं:

  • अक्षम प्रमाणीकरण पूरी तरह से (आप उल्लेख किया)
  • यूआरआई
  • के हिस्से के रूप उपयोगकर्ता नाम और पासवर्ड पारित उपयोगकर्ता नाम और पासवर्ड एक Authorization HTTP अनुरोध हेडर
  • के रूप में पारित

यदि आप उपयोगकर्ता नाम और पासवर्ड पास करना चाहते हैं, तो आपको Couch कक्षा को बदलना होगा। Authorization भेजना HTTP अनुरोध शीर्षलेख आसान है, क्योंकि सोफे क्लास httplib.HTTPConnection कक्षा का उपयोग करती है। आप Accept एक इस तरह के बगल में इस तरह के एक शीर्ष लेख जोड़ सकते हैं:

headers = { 
    "Accept": "application/json", 
    "Authorization": "Basic " + 'username:password'.encode('base64')[:-1]} 

अन्य HTTP अनुरोध तरीकों के लिए एक ही।

बुनियादी प्रमाणीकरण पर दस्तावेज़ीकरण यहाँ है:

http://books.couchdb.org/relax/reference/security

+0

को अक्षम करने पर भी कोशिश कर रहा हूं, सोफेडबी की सुरक्षा सुविधाओं पर दस्तावेज़ीकरण: http://wiki.apache.org/couchdb/Security_Features_Overview – fviktor

+0

पूरी प्रतिक्रिया fviktor के लिए धन्यवाद। – idiotype

6

तुम भी कर सकते हैं:

db = couchdb.Database("http://your.url/yourdb") 
db.resource.http.add_credentials(username, password) 

जिसके बाद अपने सभी अनुरोधों काम करना चाहिए।

+4

संसाधन में एक .http संपत्ति प्रतीत नहीं होता है, लेकिन couch.resource.credentials है। तो मैंने couch.resource.credentials = (SERVER_USER, SERVER_PASSWD) किया जो मेरे लिए काम करता है। – David

0

पाइथन-कॉचडब के लिए कई पैच हैं जो प्रमाणीकरण को सक्षम करते हैं। कोड शायद संस्करण 0.7 में शामिल किया जाएगा, लेकिन तब तक आप http://github.com/mdornseif/couchdb-python पर teh कांटा कर सकते हैं - यह आपको http://user:[email protected]:5984/ प्रकार यूआरएल का उपयोग करने की अनुमति देता है।

http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/ (नीचे) दिखाता है कि कैसे CouchDB पासवर्ड का उपयोग करें।

3

बस यूआरआई ... अजगर-CouchDB के हिस्से के रूप में यह पारित उपयोगकर्ता पार्स होगा/बाहर भेज देंगे और उनसे उपयोग करें:

http://user:[email protected]:5984

+0

यह Python-couchdb 0.7 और ऊपर के लिए सच है, इसलिए सुनिश्चित करें कि आप अद्यतित हैं। – Redbeard

19

डेविड का जबाब concour करने के लिए, (यानी "यह मैं कैसे है CouchDB 1.0.2 ")

सोफे = couchdb.Server (couch_server)

couch.resource साथ अजगर 2.6 में मॉड्यूल CouchDB 0.8 का उपयोग कर करते हैं।प्रमाण-पत्र = (USERNAME, PASSWORD)

+0

इसी तरह की स्थिति में मेरे लिए काम किया ... एक बार मुझे उद्धरण में अपना उपयोगकर्ता नाम और पासवर्ड डालने के लिए याद आया! यह यहां लिस्डेक्सिया के जवाब में अंतर्निहित है, लेकिन मैं इसका जिक्र करता हूं कि अगर किसी और के पास लंबे समय के अंत में गायब हो। बेशक आप वास्तव में उन्हें कहीं और परिभाषित नहीं किया है और यहां केवल परिवर्तनीय नामों का उपयोग कर रहे हैं। – rossdavidh

+0

मैं एक ही विधि का उपयोग करता हूं और यह हर समय ठीक काम करता है। –

+0

@rossdavidh एक अच्छा मुद्दा बनाता है। – lysdexia

1

ऊपर सब ठीक हैं; लेकिन मैं पाया है कि मूल प्रमाणीकरण बनाम OAuth सत्यापन तरीकों के लिए, यह वास्तव में अच्छी तरह से काम करता है:

from couchdb import Server, Session 
auth = Session() 
auth.name = USERNAME 
auth.password = PASSWORD 
s = Server('http://localhost:5984/', session=auth) 
db = s['dbname'] 

नोट: यह बुनियादी प्रमाणीकरण के साथ काम नहीं करेगा; ऐसे मामले में, fviktor है जो मैं सबसे अच्छा जवाब मानता हूं। यदि आप सतत लेख सत्रों में रूचि रखते हैं तो आप उससे जुड़े सुरक्षा संदर्भ सामग्री को भी देख सकते हैं।