2011-03-14 9 views
8

AntecedentesRegistrar usuario en Couchapp/CouchDB través jquery.couch.js o lo contrario

En este momento, estoy tratando de construir una aplicación con couchdb/couchapp que almacenar información persistente y fundamental por parte del usuario, y estoy atascado en los pasos necesarios para el registro de usuario con couchapp.

Básicamente, lo que quiero hacer es tener un formulario de suscripción simple que los usuarios puedan usar para registrar una cuenta para usar mi aplicación. Esto implicaría la creación de un nuevo usuario en la base de datos de usuarios de couchdb, y la creación de una nueva base de datos, con el nuevo usuario asignado el rol de administrador de la base de datos.

Todo lo que requiere las credenciales del administrador del servidor.

Idealmente, me gustaría poder hacer una llamada usando una de las funciones jquery.couch.js, pero no parece haber una manera segura de hacerlo. (O hay ??)

Pregunta

Cuál es la forma más eficiente, pero seguro para descargar esta tarea a un software de capa media o de otra manera?

Por eficiente, me refiero a necesitar la menor cantidad de pasos para el usuario, no necesariamente la menor cantidad de molestias para mí.

A partir de ahora, he configurado un servidor node.js independiente que recibe solicitudes de registro. Las credenciales de mi administrador de servidor de couchDB se almacenan como supuestas variables privadas en el archivo de nodo server.js. A continuación, envío POST cualquier solicitud de creación de db a couchDB usando couch-client.

¿Estoy saltando a través de muchos (posibles inseguros) aros aquí? ¿Hay alguna forma mejor de garantizar un proceso seguro de suscripción?

Gracias.

Respuesta

3

He usado node.js en la forma que está describiendo. No es diferente de usar middleware como PHP para comunicarse con MySQL. Tan robusto como la API es para CouchDB, sigue siendo una buena idea usar algo más en el medio para que pueda tener contenido servido sin la necesidad de AJAX. (especialmente si necesita algo más complejo que una sola entidad o una lista de entidades)

Si decide continuar con una CouchApp directa, necesitará usar un servidor proxy para enrutar las solicitudes HTTPS al servidor CouchDB mismo . (Nginx y Apache son ejemplos comunes de este caso de uso) Si no puede usar eso, hay un article en el wiki sobre cómo agregar una capa de cifrado al lado del cliente. Descubrí en el wiki que el soporte SSL nativo se agregará con v1.1 (y es compatible con el tronco de la fuente)

(Por cierto, todos estos artículos me encontré en "How-to Guides" en la Wiki CouchDB)

+0

Genial para obtener algo de tranquilidad. Ya tengo un cable conectado a Nginx, pero de alguna manera me perdí el soporte SSL nativo. = p –

+1

A partir de junio de 2011, Couchdb 1.1 tiene soporte nativo para SSL –

4

Se requiere un usuario administrador para crear una base de datos y asignar administradores de bases de datos.

La respuesta de Dominic es genial. Sin embargo, una alternativa es mantener la arquitectura couchapp directa y ejecutar su código de administrador external, fuera de la cadena user-couch.

Por ejemplo, en NodeJS, conéctese a CouchDB como administrador. Consulta /_users/_changes?feed=continuous&include_docs=true.Recibirá un evento de datos en tiempo real cuando se creen usuarios. Cuando vea un nuevo usuario, cree la base de datos y asígnelas como administrador.

El código del cliente puede sondear su nueva base de datos. O bien, el cliente también puede consultar /_users a través del feed COMET _changes también. De cualquier manera, una vez que el navegador sabe que la cuenta está configurada, puede mostrarla al usuario en la interfaz de usuario.

Proxies (arquitectura de 3 capas) son geniales. No hay nada que no puedan hacer. Sin embargo, a menudo prefiero la arquitectura de "CouchDB con un agente externo" por dos razones:

  1. Es simple. Hay un servidor web. Los usuarios se conectan a CouchDB. Te conectas a CouchDB. Todo está en la base de datos. Hay menos problemas de configuración y mantenimiento.
  2. Es flexible. Puede escribir el cliente externo en cualquier idioma, ejecutándose desde cualquier servidor. Escribe una aplicación grande para hacer todo, o muchas aplicaciones pequeñas para enfocarse en una tarea cada una (por ejemplo, crear nuevas bases de datos, enviar correos electrónicos a los usuarios sobre las contraseñas perdidas, notificarle si una base de datos es demasiado grande, etc., etc.).
+1

Ahora que suena como algo para probar. ¡Gracias! Definitivamente echaremos un vistazo a la funcionalidad [eventos externos] (http://davispj.com/2010/09/26/new-couchdb-externals-api.html). –

Cuestiones relacionadas