用户通过jquery.couch.js或其他方式注册Couchapp / CouchDB

时间:2011-03-14 22:46:40

标签: jquery couchdb couchapp

背景

现在,我正在尝试使用couchDB / couchapp构建一个应用程序,该应用程序将存储来自用户的持久且关键的信息,并且我坚持使用couchapp进行用户注册所需的步骤。

基本上,我想要做的是拥有一个简单的注册表单,用户可以使用该表单注册帐户以使用我的应用程序。这将需要在couchdb _users数据库中创建新用户,并创建新数据库,并为新用户分配数据库admin角色。

所有这些都需要服务器管理员凭据。

理想情况下,我希望能够使用其中一个jquery.couch.js函数拨打电话,但似乎没有一种安全的方法可以做到这一点。 (或者是吗?)

问题

将此任务卸载到中间层软件或其他方面的最有效但最安全的方法是什么?

有效率,我的意思是需要为用户提供最少量的步骤,对我来说不一定是最少的麻烦。

截至目前,我已经设置了一个单独的node.js服务器来接收注册请求。我的couchDB服务器管理员凭据作为假定的私有变量存储在节点server.js文件中。然后我使用couch-client将任何数据库创建请求POST回到couchDB。

我是否在这里跳过太多(潜在的不安全)箍?有没有更好的方法来确保安全的注册过程?

感谢。

2 个答案:

答案 0 :(得分:4)

管理员用户需要创建数据库并分配数据库管理员。

多米尼克的答案很棒。但是,另一种方法是保留直接couchapp架构并在用户沙发链之外运行管理代码 external

例如,在NodeJS中,以管理员身份连接到CouchDB。查询/_users/_changes?feed=continuous&include_docs=true。创建用户后,您将实时收到数据事件。当您看到新用户时,请创建数据库并将其指定为admin。

客户端代码可以轮询其新数据库。或者,客户端也可以通过/_users COMET Feed查询_changes。无论哪种方式,一旦浏览器知道该帐户已设置,您就可以在UI中向用户显示它。

代理(3层架构)非常棒。他们无能为力。但是,我经常更喜欢“CouchDB与外部代理”的架构,原因有两个:

  1. 很简单。有一个Web服务器。用户连接到CouchDB。您连接到CouchDB。一切都在数据库中。配置和维护问题较少。
  2. 很灵活。您可以使用任何语言编写外部客户端,从任何服务器运行。您编写了一个大型应用程序来执行所有操作,或者编写许多小型应用程序以专注于每个任务(例如,创建新数据库,通过电子邮件向用户发送丢失的密码,通知您数据库是否太大等等)。

答案 1 :(得分:3)

我以你描述的方式使用了node.js.与使用像PHP这样的中间件与MySQL通信没有什么不同。尽管API适用于CouchDB,但在中间使用其他东西仍然是一个好主意,这样您就可以在不需要AJAX的情况下提供内容。 (特别是如果你需要比单个实体或实体列表更复杂的东西)

如果您决定继续使用直接CouchApp,则需要使用代理服务器将HTTPS请求路由到CouchDB服务器本身。 (NginxApache是此用例的常见示例)如果您不能使用它,则wiki中有一个关于向客户端添加加密层的article。我在wiki上发现本地SSL支持将与v1.1一起添加(并且在源的主干中受支持)

(顺便说一句,我在CouchDB Wiki上通过“How-to Guides”遇到的所有这些文章)