couchDB , python and authentication

前端 未结 6 1676
一整个雨季
一整个雨季 2021-02-04 11:44

I have installed couchDB v 0.10.0, and am attempting to talk to it via python from Couch class downloaded from couchDB wiki. Problem is:

Create database \'mydb\'         


        
相关标签:
6条回答
  • 2021-02-04 12:13

    There are several patches for python-couchdb that enable authentication. The code probably will be included in Version 0.7 but until then you can usr teh fork at http://github.com/mdornseif/couchdb-python - it allows you to use http://user:pass@127.0.0.1:5984/ type URLs.

    http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/ (at the bottom) shows how to use CouchDB passwords.

    0 讨论(0)
  • 2021-02-04 12:14

    Just pass it as part of the URI...python-couchdb will parse the user/pass out and use them:

    http://user:pass@localhost:5984

    0 讨论(0)
  • 2021-02-04 12:26

    The Couch class in the example does not pass any authentication information to the database, so it is not a miracle that it does not allow privileged operations. So your only options are:

    • disable authentication completely (as you mentioned)
    • pass the user name and password as part of the URI
    • pass the user name and password as an Authorization HTTP request header

    If you want to pass a user name and a password, then you will need to change the Couch class. Sending an Authorization HTTP request header is easier, since the Couch class uses the httplib.HTTPConnection class. You can add such a header next to the Accept one this way:

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

    Same for the other HTTP request methods.

    The documentation on the basic authentication is here:

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

    0 讨论(0)
  • 2021-02-04 12:34

    You can also do:

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

    after which all your requests should work.

    0 讨论(0)
  • 2021-02-04 12:37

    Above are all nice; but I've found that for oauth validation methods versus basic auth, this works really well:

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

    Note: This will not work with basic authentication; in such a case, fviktor has what I consider to be the best answer. You might also look into the security reference material he linked to if you're interested in persistent auth sessions.

    0 讨论(0)
  • 2021-02-04 12:38

    To concour David's reply, (i.e. "This is how I do it using module CouchDB 0.8 in python 2.6 with couchdb 1.0.2")

    couch = couchdb.Server(couch_server)

    couch.resource.credentials = (USERNAME, PASSWORD)

    0 讨论(0)
提交回复
热议问题