多用户 Ionic/CouchDB 应用的推荐
Recommendations for multi-user Ionic/CouchDB app
我需要为使用 Ionic 1、PouchDB 和 CouchDB 开发的单页移动应用程序添加多用户功能。阅读了许多文档后,我对什么是最佳选择感到困惑。
关于我的应用程序:
它应该可以离线工作,然后在在线时与服务器同步(这就是我使用 PouchDB 和 CouchDB 的原因,目前运行良好)
它应该让用户使用用户名和密码创建一个帐户,然后将其存储在应用程序中,这样他就不必在每次启动应用程序时再次登录。该帐户将确保他的数据随后在安全位置的服务器上同步,以便其他用户无法访问它。
目前用户之间不需要共享信息
根据我所阅读的内容,我正在考虑以下内容:
- 在服务器上,每个用户有一个数据库,存储他自己的数据
- 在服务器上,有一个主数据库,存储所有用户的所有数据,以及设计文档。这使得在一个地方更改设计文档变得容易,并将它们复制到每个用户数据库(然后在应用程序的 PouchDB 数据库中)。主数据库和用户数据库之间的数据同步是通过过滤器完成的,因此只有属于一个用户的文档(通过某些
userId
字段)才被复制到该用户的数据库中
- 使用另一个 module/plugin(SuperLogin?nolanlawson/pouchdb-authentication?)从应用程序管理用户(用户创建、登录、注销、密码重置、密码丢失的电子邮件通知,...)
我的问题:
您觉得这个架构合适吗,或者您有更好的推荐吗?
您会推荐哪些软件用于用户管理? SuperLogin 看起来不错,但需要 运行 在单独的 HTTP 服务器上,使架构更加复杂。它会自动为每个新用户创建一个新数据库吗(我不这么认为)? Nolanlawson/pouchdb-authentication 是客户端专用的,但它适合 Ionic 1 吗? SuperLogin 开箱即用,难道没有很多东西可以围绕它开发吗?您还有其他想要的模块吗?
非常感谢您的帮助!
这是一种合适的方法。即使客户端离线,本地 PouchDB 也会在客户端提供数据。与中央 CouchDB 服务器的结合非常适合在服务器和客户端之间保持数据同步。
您想存储用户凭据,因此您必须以某种方式在客户端保存此数据,这可以在单独的 PouchDB 中完成。
如果您将所有用户数据保存在本地 PouchDB 数据库中,并且服务器上的每个用户都有一个 CouchDB 数据库,您甚至可以省略您提到的过滤器,因为同步只会发生在这两个用户数据库之间。
我推荐 SuperLogin。是的,您必须安装 NodeJS
和一些额外的库(即 morgan
、express
、http
、body-parser
和 cors
),并且您将必须向至少一个新端口打开您的服务器才能提供此服务。但是 SuperLogin 在管理 CouchDB 服务器上的用户帐户和用户数据库方面确实非常强大。
例如,如果用户注册,您只需通过http://server_address:port/auth/register
调用SuperLogin,查询用户名、密码等,SuperLogin不仅将这个新用户添加到用户数据库中,还仅为该用户自动创建一个新数据库。每个用户可以拥有多个数据库(私有或共享),SuperLogin 管理对所有这些数据库的访问权限。此外,SuperLogin 还可以发送确认电子邮件或重新发送忘记的密码(分别是访问令牌)。
当然,您将需要进行大量配置(但是,嘿,至少您拥有所有这些选项),也许您甚至需要为 SuperLogin 未涵盖的功能编写一些额外的 API。但总的来说,SuperLogin 为自定义用户管理的开发省去了很多痛苦。
但如果您不确定服务器配置,也许 Couchbase、Firebase 等服务是更好的解决方案。这些服务还具有一些用户管理功能,您不必担心服务器安全问题。
我需要为使用 Ionic 1、PouchDB 和 CouchDB 开发的单页移动应用程序添加多用户功能。阅读了许多文档后,我对什么是最佳选择感到困惑。
关于我的应用程序:
它应该可以离线工作,然后在在线时与服务器同步(这就是我使用 PouchDB 和 CouchDB 的原因,目前运行良好)
它应该让用户使用用户名和密码创建一个帐户,然后将其存储在应用程序中,这样他就不必在每次启动应用程序时再次登录。该帐户将确保他的数据随后在安全位置的服务器上同步,以便其他用户无法访问它。
目前用户之间不需要共享信息
根据我所阅读的内容,我正在考虑以下内容:
- 在服务器上,每个用户有一个数据库,存储他自己的数据
- 在服务器上,有一个主数据库,存储所有用户的所有数据,以及设计文档。这使得在一个地方更改设计文档变得容易,并将它们复制到每个用户数据库(然后在应用程序的 PouchDB 数据库中)。主数据库和用户数据库之间的数据同步是通过过滤器完成的,因此只有属于一个用户的文档(通过某些
userId
字段)才被复制到该用户的数据库中 - 使用另一个 module/plugin(SuperLogin?nolanlawson/pouchdb-authentication?)从应用程序管理用户(用户创建、登录、注销、密码重置、密码丢失的电子邮件通知,...)
我的问题:
您觉得这个架构合适吗,或者您有更好的推荐吗?
您会推荐哪些软件用于用户管理? SuperLogin 看起来不错,但需要 运行 在单独的 HTTP 服务器上,使架构更加复杂。它会自动为每个新用户创建一个新数据库吗(我不这么认为)? Nolanlawson/pouchdb-authentication 是客户端专用的,但它适合 Ionic 1 吗? SuperLogin 开箱即用,难道没有很多东西可以围绕它开发吗?您还有其他想要的模块吗?
非常感谢您的帮助!
这是一种合适的方法。即使客户端离线,本地 PouchDB 也会在客户端提供数据。与中央 CouchDB 服务器的结合非常适合在服务器和客户端之间保持数据同步。
您想存储用户凭据,因此您必须以某种方式在客户端保存此数据,这可以在单独的 PouchDB 中完成。
如果您将所有用户数据保存在本地 PouchDB 数据库中,并且服务器上的每个用户都有一个 CouchDB 数据库,您甚至可以省略您提到的过滤器,因为同步只会发生在这两个用户数据库之间。
我推荐 SuperLogin。是的,您必须安装 NodeJS
和一些额外的库(即 morgan
、express
、http
、body-parser
和 cors
),并且您将必须向至少一个新端口打开您的服务器才能提供此服务。但是 SuperLogin 在管理 CouchDB 服务器上的用户帐户和用户数据库方面确实非常强大。
例如,如果用户注册,您只需通过http://server_address:port/auth/register
调用SuperLogin,查询用户名、密码等,SuperLogin不仅将这个新用户添加到用户数据库中,还仅为该用户自动创建一个新数据库。每个用户可以拥有多个数据库(私有或共享),SuperLogin 管理对所有这些数据库的访问权限。此外,SuperLogin 还可以发送确认电子邮件或重新发送忘记的密码(分别是访问令牌)。
当然,您将需要进行大量配置(但是,嘿,至少您拥有所有这些选项),也许您甚至需要为 SuperLogin 未涵盖的功能编写一些额外的 API。但总的来说,SuperLogin 为自定义用户管理的开发省去了很多痛苦。
但如果您不确定服务器配置,也许 Couchbase、Firebase 等服务是更好的解决方案。这些服务还具有一些用户管理功能,您不必担心服务器安全问题。