针对多用户Ionic / CouchDB应用程序的建议

时间:2016-11-29 11:40:33

标签: ionic-framework synchronization couchdb pouchdb multi-user

我需要为使用Ionic 1,PouchDB和CouchDB开发的单页移动应用添加多用户功能。在阅读了很多文档后,我对最佳选择感到困惑。

关于我的应用:

  • 它应该能够脱机工作,然后在线时与服务器同步(这就是为什么我使用PouchDB和CouchDB,到目前为止工作得很好)

  • 它应该让用户使用用户名和密码创建一个帐户,然后将其存储在应用程序中,这样他无需在启动应用程序时再次登录。此帐户将确保他的数据然后在安全的地方在服务器上同步,以便其他用户无法访问它。

  • 目前无需在用户之间共享信息

根据我所读到的内容,我正在考虑以下内容:

  • 在服务器上,每个用户拥有一个数据库,存储自己的数据
  • 在服务器上,有一个主数据库,存储所有用户的所有数据,以及设计文档。这使得在单个位置更改设计文档变得容易,并将它们复制到每个用户数据库(然后在应用程序的PouchDB数据库中)。主数据库和用户数据库之间的数据同步是通过过滤器完成的,因此只有属于一个用户的文档(通过某个userId字段)才会复制到该用户的数据库中
  • 使用另一个模块/插件(SuperLogin?nolanlawson / pouchdb-authentication?)从应用程序管理用户(用户创建,登录,注销,密码重置,密码丢失的电子邮件通知,......)

我的问题:

  • 您认为这种架构是否合适,或者您是否有更好的建议?

  • 您会为用户管理推荐哪种软件? SuperLogin看起来很棒,但需要在单独的HTTP服务器上运行,这使得架构更加复杂。它是否为每个新用户自动创建一个新数据库(我不这么认为)? Nolanlawson / pouchdb-authentication仅限客户端,但它是否适合Ionic 1?是不是有很多东西需要开发,它与SuperLogin开箱即用?你还有其他模块吗?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是一种合适的方法。即使客户端脱机,本地PouchDB也将在客户端提供数据。与中央CouchDB服务器的组合非常适合在服务器和客户端之间保持数据同步。

您希望存储用户凭据,因此您必须以某种方式在客户端保存此数据,这可以在单独的PouchDB中完成。

如果您将所有用户数据保存在本地PouchDB数据库中并且每个用户在服务器上有一个CouchDB数据库,您甚至可以省略您提到的过滤器,因为同步只会在这两个用户数据库之间进行。

我推荐SuperLogin。是的,您必须安装NodeJS和一些额外的库(即morganexpresshttpbody-parsercors),然后您将必须打开您的服务器至少一个新端口来提供此服务。但SuperLogin在CouchDB服务器上管理用户帐户和用户数据库非常强大。

例如,如果用户注册,您只需通过http://server_address:port/auth/register调用SuperLogin,查询用户名,密码等,SuperLogin不仅会将此新用户添加到用户数据库,还会自动创建仅适用于此用户的新数据库。每个用户可以拥有多个数据库(私有或共享),SuperLogin管理所有这些数据库的访问权限。此外,SuperLogin还可以发送确认电子邮件或重新发送忘记的密码(分别是访问令牌)。

当然,你必须配置很多(但是,嘿,至少你有所有这些选项),也许你甚至不得不为SuperLogin未涵盖的功能编写一些额外的API。但总的来说,SuperLogin在开发自定义用户管理方面节省了很多痛苦。

但如果您不确定服务器配置,可能Couchbase,Firebase等服务是更好的解决方案。这些服务还具有一些用户管理功能,您不得不为服务器安全性而烦恼。