CouchDB、Python与认证

11 投票
6 回答
10178 浏览
提问于 2025-04-15 16:14

我安装了couchDB版本0.10.0,现在想通过从couchDB维基下载的Couch类用Python和它进行交流。问题是:

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

我手动编辑了local.ini文件,加入了我在mac上的登录名和密码。现在我可以通过futon完全访问它,但用Python却没有成功。这是HTTP头的问题吗?

我有点无从下手了,谢谢!

6 个回答

5

这个例子中的 Couch 类没有向数据库传递任何认证信息,所以它不允许进行特权操作也就不奇怪了。因此,你的选择只有以下几种:

  • 完全禁用认证(就像你提到的那样)
  • 把用户名和密码作为URI的一部分传递
  • 把用户名和密码作为 Authorization 的HTTP请求头传递

如果你想传递用户名和密码,就需要修改 Couch 类。发送 Authorization 的HTTP请求头比较简单,因为 Couch 类使用的是 httplib.HTTPConnection 类。你可以像下面这样在 Accept 头旁边添加这个头:

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

其他HTTP请求方法也是一样的。

关于基本认证的文档可以在这里找到:

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

6

你还可以这样做:

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

这样之后,你的所有请求应该都能正常工作。

23

为了支持大卫的回复,(也就是说“这是我在Python 2.6中使用CouchDB 0.8模块和CouchDB 1.0.2的做法”)

couch = couchdb.Server(couch_server)

couch.resource.credentials = (USERNAME, PASSWORD)

撰写回答