Регистрация пользователя в Couchapp / CouchDB через jquery.couch.js или в противном случае - PullRequest
8 голосов
/ 15 марта 2011

Фон

Сейчас я пытаюсь создать приложение с couchDB / couchapp, которое будет хранить постоянную и важную информацию от пользователя, и застрял на шагах, необходимыхрегистрация пользователя с couchapp.

По сути, я хочу иметь простую форму регистрации, которую пользователи могут использовать для регистрации учетной записи для использования моего приложения.Это повлечет за собой создание нового пользователя в базе данных couchdb _users и создание новой базы данных с новым пользователем, которому назначена роль администратора базы данных.

Все, что требует учетных данных администратора сервера.

В идеале, я бы хотел сделать звонок, используя одну из функций jquery.couch.js, но, похоже, не существует безопасного способа сделать это.(или есть ??)

Вопрос

Какой самый эффективный и в то же время безопасный способ переложить эту задачу на программное обеспечение среднего уровня или иным способом?

Под эффективностью я имею в виду наименьшее количество шагов для пользователя, а не наименьшее количество хлопот для меня.

На данный момент я настроил отдельный сервер node.js, который получает запросы на регистрацию.Мои учетные данные администратора сервера couchDB хранятся в виде предполагаемых личных переменных в файле узла server.js.Затем я отправляю любой запрос на создание базы данных обратно на couchDB, используя couch-client.

Прыгаю ли я здесь через слишком много (потенциально небезопасных) обручей?Есть ли лучший способ обеспечить безопасный процесс регистрации?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Администратор должен создать базу данных и назначить администраторов базы данных.

Доминик ответил отлично.Однако альтернативой является сохранение архитектуры прямого couchapp и запуск вашего кода администратора external вне цепочки user-couch.

Например, в NodeJS подключитесь к CouchDB как администратор.Запрос /_users/_changes?feed=continuous&include_docs=true.Вы получите событие data в режиме реального времени при создании пользователей.Когда вы видите нового пользователя, создайте базу данных и назначьте ее администратором.

Код клиента может опрашивать их новую базу данных.Или клиент также может запросить /_users через фид _changes COMET.В любом случае, как только браузер узнает, что учетная запись настроена, вы можете показать ее пользователю в пользовательском интерфейсе.

Прокси (трехуровневая архитектура) великолепны.Там нет ничего, что они не могут сделать.Однако я часто предпочитаю архитектуру «CouchDB с внешним агентом» по двум причинам:

  1. Это просто.Есть один веб-сервер.Пользователи подключаются к CouchDB.Вы подключаетесь к CouchDB.Все есть в базе данных.Менее проблем с настройкой и обслуживанием.
  2. Это гибкий.Вы можете написать внешний клиент на любом языке, работающем с любого сервера.Вы пишете одно большое приложение, чтобы делать все, или много маленьких приложений, чтобы сосредоточиться на одной задаче (например, создание новых баз данных, отправка по электронной почте пользователям утерянных паролей, уведомление о том, что база данных слишком велика и т. Д. И т. Д.).
3 голосов
/ 15 марта 2011

Я использовал node.js так, как вы описываете. Это ничем не отличается от использования промежуточного программного обеспечения, такого как PHP, для взаимодействия с MySQL. Как бы ни был надежен API для CouchDB, все же неплохо бы использовать что-то еще посередине, чтобы вы могли получать контент без необходимости в AJAX. (особенно если вам нужно что-то более сложное, чем отдельный объект или список объектов)

Если вы решите продолжить работу с прямым CouchApp, вам потребуется использовать прокси-сервер для маршрутизации HTTPS-запросов на сам сервер CouchDB. ( Nginx и Apache являются типичными примерами этого варианта использования) Если вы не можете использовать это, в вики есть статья о добавлении слоя шифрования на стороне клиента. В wiki я обнаружил, что встроенная поддержка SSL будет добавлена ​​с v1.1 (и поддерживается в стволе исходного кода)

(Кстати, все эти статьи, с которыми я сталкивался через " Руководства " на CouchDB Wiki)

...