2009-11-21 10 views
10

He instalado couchDB v 0.10.0, y estoy tratando de hablar a través de Python desde la clase Couch descargado desde couchDB wiki. El problema es:couchDB, python y autenticación

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

He editado manualmente el archivo local.ini para incluir mi nombre de usuario y contraseña estándar de osx. Ahora tengo acceso completo a través de un futón, pero no me alegra WRT Python. ¿Es este un problema de encabezado http?

En una pérdida - ¡gracias!

+0

¿Qué biblioteca de python estás usando? Hay varios listados en la página wiki de python (http://wiki.apache.org/couchdb/Getting_started_with_Python) – andyuk

+0

Gracias andyuk - Estoy usando el código de EJEMPLO que está en la página wiki ya que es el más simple. También estoy tratando de encontrar el documento de couchDB en la desactivación de auth (localmente) – idiotype

Respuesta

5

La clase Couch en el ejemplo no pasa ninguna información de autenticación a la base de datos, por lo que no es un milagro que no permita operaciones privilegiadas. Por lo que sus únicas opciones son:

  • autenticación desactivar por completo (como usted ha mencionado)
  • pasar el nombre de usuario y contraseña como parte de la URI
  • pasar el nombre de usuario y contraseña como un encabezado de solicitud Authorization HTTP

Si desea pasar un nombre de usuario y una contraseña, deberá cambiar la clase Couch. Enviar un encabezado de solicitud HTTP Authorization es más fácil, ya que la clase Couch usa la clase httplib.HTTPConnection. Se puede añadir una cabecera como al lado de la Accept uno de esta manera:

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

Lo mismo para los otros métodos de petición HTTP.

La documentación sobre la autenticación básica está aquí:

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

+0

Documentación sobre las características de seguridad de CouchDB: http://wiki.apache.org/couchdb/Security_Features_Overview – fviktor

+0

gracias por la respuesta completa fviktor. – idiotype

6

También puede hacer:

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

después de lo cual todas sus peticiones debería funcionar.

+4

No parece ser una propiedad .http en resource, pero hay couch.resource.credentials. Así que hice couch.resource.credentials = (SERVER_USER, SERVER_PASSWD) que funciona para mí. – David

19

Para concour respuesta de David, (es decir, "Así es como me hacerlo usando el módulo CouchDB 0,8 ​​en Python 2.6 con couchdb 1.0.2")

sofá = couchdb.Server (couch_server)

couch.resource.credenciales = (NOMBRE DE USUARIO, CONTRASEÑA)

+0

funcionó para mí en una situación similar ... ¡una vez que recordé poner mi nombre de usuario y contraseña entre comillas! Está algo implicado en la respuesta de lysdexia aquí, pero lo menciono aquí en caso de que alguien más esté perdiendo eso al final de un día largo. A menos, por supuesto, que los hayas definido en otro lugar y solo estés usando nombres de variables aquí. – rossdavidh

+0

Uso el mismo método y funciona bien todo el tiempo. –

+0

@rossdavidh hace un buen punto. – lysdexia

1

Arriba están todas bien; pero me he dado cuenta que para la validación de métodos de autenticación OAuth frente básico, esto funciona muy bien:

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

Nota: Esto no funcionará con la autenticación básica; en tal caso, fviktor tiene lo que considero la mejor respuesta. También puede consultar el material de referencia de seguridad al que se vinculó si le interesan las sesiones de autenticación persistente.

Cuestiones relacionadas