11

我已经安装了 couchDB v 0.10.0,并试图通过从 couchDB wiki 下载的 Couch 类中的 python 与之交谈。问题是:

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

我手动编辑了 local.ini 文件以包含我的标准 osx 登录名和密码。我现在可以通过蒲团完全访问,但没有快乐 WRT python。这是http标头问题吗?

不知所措-谢谢!

4

6 回答 6

23

为了同意大卫的回复,(即“这就是我在 python 2.6 中使用模块 CouchDB 0.8 和 couchdb 1.0.2 的方式”)

couch = couchdb.Server(couch_server)

couch.resource.credentials = (USERNAME, PASSWORD)
于 2011-02-14T16:16:15.477 回答
6

你也可以这样做:

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

之后您的所有请求都应该有效。

于 2009-12-04T18:35:36.723 回答
5

示例中的Couch类没有将任何身份验证信息传递给数据库,因此它不允许特权操作并不奇怪。所以你唯一的选择是:

  • 完全禁用身份验证(如您所述)
  • 将用户名和密码作为 URI 的一部分传递
  • 将用户名和密码作为AuthorizationHTTP 请求标头传递

如果要传递用户名和密码,则需要更改Couch类。发送AuthorizationHTTP 请求标头更容易,因为 Couch 类使用httplib.HTTPConnection该类。您可以通过以下方式在标题旁边添加这样的标题Accept

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

其他 HTTP 请求方法也一样。

有关基本身份验证的文档在这里:

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

于 2009-11-22T02:37:41.550 回答
3

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

http://user:pass@localhost:5984

于 2010-11-29T23:45:38.073 回答
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 有我认为最好的答案。如果您对持久身份验证会话感兴趣,您还可以查看他链接到的安全参考资料。

于 2012-03-09T11:33:35.333 回答
0

python-couchdb 有几个补丁可以启用身份验证。该代码可能会包含在 0.7 版中,但在那之前您可以在http://github.com/mdornseif/couchdb-python使用 usr 分叉- 它允许您使用http://user:pass@127.0.0.1:5984 /输入网址。

http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/(在底部)展示了如何使用 CouchDB 密码。

于 2009-12-26T18:56:38.010 回答