Рекомендации для многопользовательского приложения Ionic/CouchDB

Мне нужно добавить многопользовательскую возможность в одностраничное мобильное приложение, разработанное с помощью Ionic 1, PouchDB и CouchDB. После прочтения многих документов я запутался в том, что было бы лучшим выбором.

О моем приложении:

  • он должен иметь возможность работать в автономном режиме, а затем синхронизироваться с сервером в режиме онлайн (поэтому я использую PouchDB и CouchDB, которые до сих пор отлично работают)

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

  • в настоящее время нет необходимости обмениваться информацией между пользователями

На основании того, что я прочитал, я думаю о следующем:

  • на сервере иметь одну базу данных на пользователя, хранящую его собственные данные
  • на сервере есть основная база данных, в которой хранятся все данные всех пользователей, а также проектная документация. Это позволяет легко изменять проектные документы в одном месте и реплицировать их в каждой пользовательской базе данных (а затем в базе данных PouchDB в приложении). Синхронизация данных между главной и пользовательской базами данных выполняется через фильтр, так что только документы, принадлежащие одному пользователю (через некоторое поле userId), реплицируются только в базу данных этого пользователя.
  • используйте другой модуль/плагин (SuperLogin? nolanlawson/pouchdb-authentication?) для управления пользователями из приложения (создание пользователя, вход в систему, выход из системы, сброс пароля, уведомление по электронной почте о потере пароля, ...)

Мои вопросы:

  • как вы думаете, эта архитектура подходит, или вы можете порекомендовать что-то лучше?

  • какое программное обеспечение вы бы порекомендовали для управления пользователями? SuperLogin выглядит великолепно, но его нужно запускать на отдельном HTTP-сервере, что усложняет архитектуру. Создает ли он автоматически новую базу данных для каждого нового пользователя (я так не думаю)? Nolanlawson/pouchdb-authentication предназначен только для клиента, но подходит ли он для Ionic 1? Разве вокруг этого не нужно разрабатывать МНОГО вещей, которые выходят из коробки с SuperLogin? Вы имеете в виду какой-либо другой модуль?

Заранее большое спасибо за вашу помощь!


person bfredo123    schedule 29.11.2016    source источник


Ответы (1)


Это правильный подход. Локальные PouchDB будут предоставлять данные на стороне клиента, даже если клиент отключился. А комбинация с центральным сервером CouchDB отлично подходит для синхронизации данных между сервером и клиентами.

Вы хотите сохранить учетные данные пользователей, поэтому вам придется каким-то образом сохранить эти данные на стороне клиента, что можно сделать в отдельной PouchDB.

Если вы храните все свои пользовательские данные в локальной базе данных PouchDB и имеете одну базу данных CouchDB для каждого пользователя на сервере, вы даже можете опустить упомянутый вами фильтр, потому что синхронизация будет происходить только между этими двумя пользовательскими базами данных.

Я рекомендую СуперЛогин. Да, вам нужно установить NodeJS и некоторые дополнительные библиотеки (а именно morgan, express, http, body-parser и cors), и вам нужно будет открыть свой сервер хотя бы для одного нового порта, чтобы предоставить эту услугу. Но SuperLogin действительно мощен для управления учетными записями пользователей и пользовательскими базами данных на сервере CouchDB.

Например, если пользователь регистрируется, вы просто делаете вызов SuperLogin через http://server_address:port/auth/register, запрашиваете имя пользователя, пароль и т. д., и SuperLogin не только добавляет этого нового пользователя в базу данных пользователей, но также автоматически создает новую базу данных только для этого пользователя. . Каждый пользователь может иметь несколько баз данных (частных или общих), и SuperLogin управляет правами доступа ко всем этим базам данных. Кроме того, SuperLogin также может отправлять электронные письма с подтверждением или повторно отправлять забытые пароли (токен доступа соответственно).

Конечно, вам придется многое настраивать (но, по крайней мере, у вас есть все эти опции), и, возможно, вам даже придется написать какой-то дополнительный API для функциональности, не покрываемой SuperLogin. Но в целом SuperLogin избавляет от многих проблем, связанных с разработкой пользовательского управления пользователями.

Но если вы не уверены в конфигурации сервера, возможно, лучшим решением будет такой сервис, как Couchbase, Firebase и т. д. Эти сервисы также имеют некоторые возможности управления пользователями, и вам придется меньше беспокоиться о безопасности сервера.

person Onno    schedule 29.11.2016
comment
Большое спасибо за ваш отзыв. Тем временем я начал играть с SuperLogin. В настоящее время у меня есть проблемы с /auth/register, который не работает одинаково в зависимости от того, откуда приходит запрос (javascript или почтальон), чаще всего он не работает, иногда работает (т.е. создает пользователя в CouchDB) через 30 секунд. с задержкой и всегда отвечает кодом ошибки. Я должен отладить это и найти способы сделать SuperLogin более подробным о проблемах :-). Что касается отфильтрованной синхронизации, я намеревался использовать ее между базой данных Master и каждой из баз данных сервера для каждого пользователя. - person bfredo123; 29.11.2016