背景
现在,我正在尝试使用 couchDB/couchapp 构建一个应用程序,该应用程序将存储来自用户的持久且重要的信息,并且停留在用户使用 couchapp 注册所需的步骤上。
本质上,我想做的是有一个简单的注册表单,用户可以使用它来注册帐户以使用我的应用程序。这需要在 couchdb _users 数据库中创建一个新用户,并创建一个新数据库,并为新用户分配数据库管理员的角色。
所有这些都需要服务器管理员凭据。
理想情况下,我希望能够使用 jquery.couch.js
函数之一进行调用,但似乎没有一种安全的方法可以做到这一点。 (或者有吗?)
问题
将此任务转移到中间层软件或其他软件的最有效且安全的方法是什么?
我所说的高效是指用户需要最少的步骤,但对我来说不一定是最少的麻烦。
到目前为止,我已经设置了一个单独的 node.js 服务器来接收注册请求。我的 couchDB 服务器管理凭据作为假定的私有(private)变量存储在节点 server.js
文件中。然后,我使用 couch-client
将任何数据库创建请求发布回 couchDB。 .
我在这里跳过了太多(潜在的不安全的)障碍吗?有没有更好的方法来确保安全的注册过程?
谢谢。
最佳答案
需要管理员用户来创建数据库并分配数据库管理员。
多米尼克的回答很棒。然而,另一种方法是保留直接 couchapp 架构并在用户沙发链之外运行外部管理代码。
例如,在 NodeJS 中,以管理员身份连接到 CouchDB。查询 /_users/_changes?feed=continuous&include_docs=true
。创建用户时,您将实时收到数据事件。当您看到新用户时,创建数据库并将其分配为管理员。
客户端代码可以轮询他们的新数据库。或者,客户端也可以通过 _changes
COMET feed 查询 /_users
。无论哪种方式,一旦浏览器知道帐户已设置,您就可以在 UI 中向用户显示它。
代理(3 层架构)非常棒。没有什么是他们做不到的。然而,我通常更喜欢“带有外部代理的 CouchDB”架构,原因有两个:
- 很简单。有一台网络服务器。用户连接到 CouchDB。您连接到 CouchDB。一切都在数据库中。配置和维护问题较少。
- 它很灵活。您可以用任何语言编写外部客户端,并在任何服务器上运行。您编写一个大型应用程序来完成所有任务,或者编写许多小型应用程序来专注于每个任务(例如创建新数据库、向用户发送电子邮件告知丢失的密码、在数据库太大时通知您等等)。
关于jquery - 通过 jquery.couch.js 或其他方式在 Couchapp/CouchDB 中进行用户注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5305543/