2011-03-14 60 views
8

背景用戶註冊在Couchapp/CouchDB中通過jquery.couch.js或否則

現在,我正在試圖建立使用CouchDB/couchapp一個應用程序,將存儲在用戶的持續和重要的信息,並堅持使用couchapp用戶註冊所需的步驟。

本質上,我想要做的是有一個簡單的註冊表單,用戶可以使用該註冊表單來註冊使用我的應用程序的帳戶。這將需要在couchdb _users數據庫中創建一個新用戶,並創建一個新數據庫,新用戶分配了數據庫管理員角色。

所有需要服務器管理員憑據。

理想情況下,我希望能夠使用jquery.couch.js函數之一撥打電話,但似乎沒有一個安全的方法來做到這一點。 (或者是有??)

問題

什麼是這個任務卸載到一箇中間層軟件或以其他方式最高效而安全的方法是什麼?

通過高效率,我的意思是需要用戶最少量的步驟,對我來說不一定是最少量的麻煩。

截至目前,我已經建立了一個單獨的node.js服務器來接收註冊請求。我的couchDB服務器管理員憑證在節點server.js文件中存儲爲假定的私有變量。然後我使用couch-client將任何數據庫創建請求發回給couchDB。

我在這裏跳過太多(潛在的不安全)箍嗎?有沒有更好的方法來確保安全的註冊過程?

謝謝。

回答

3

我用你描述的方式使用了node.js。與使用PHP等中間件與MySQL進行通信沒有什麼不同。就像CouchDB的API一樣強大,在中間使用其他內容仍然是一個好主意,因此您可以在不需要AJAX的情況下提供內容。 (特別是如果您需要比單個實體或實體列表更復雜的任何東西)

如果您決定繼續使用直接CouchApp,則需要使用代理服務器將HTTPS請求路由到CouchDB服務器本身。 (NginxApache是本用例的常見示例)如果您不能使用該功能,則wiki中會有一個article關於向客戶端添加一層加密。我發現在wiki上,原生SSL支持將會與v1.1一起被添加(並且在源文件中被支持)

(順便說一句,我在CouchDB Wiki上通過「How-to Guides」遇到的所有這些文章)

+0

偉大的獲得一些保證。我已經連接到Nginx,但不知何故,我錯過了本地SSL支持。 = p – 2011-03-15 05:34:04

+1

截至2011年6月,Couchdb 1.1對SSL有原生支持 – 2011-08-09 14:59:19

4

管理員用戶需要創建數據庫並分配數據庫管理員。

Dominic的回答非常好。然而,另一種選擇是保持couchapp的直接架構,並在用戶對象鏈之外運行管理代碼external

例如,在NodeJS中,以管理員身份連接到CouchDB。查詢/_users/_changes?feed=continuous&include_docs=true。在創建用戶時,您將實時收到數據事件。當您看到新用戶時,請創建數據庫並將其作爲管理員分配。

客戶端代碼可以輪詢他們的新數據庫。或者,客戶也可以通過_changes COMET訂閱源查詢/_users。無論哪種方式,一旦瀏覽器知道該帳戶已設置,您可以在用戶界面中將其顯示給用戶。

代理(3層架構)非常棒。沒有什麼他們不能做的。然而,我經常更喜歡「CouchDB與外部代理」的體系結構,原因有兩個:

  1. 這很簡單。有一個Web服務器。用戶連接到CouchDB。你連接到CouchDB。一切都在數據庫中。配置和維護問題較少。
  2. 它很靈活。您可以使用任何語言編寫外部客戶端,從任何服務器運行。你寫一個大應用來完成所有事情,或者是許多小應用集中在每個任務上(例如,創建新的數據庫,通過電子郵件發送用戶丟失的密碼,通知你數據庫是否過大等等)。
+1

現在聽起來像是要嘗試一下。謝謝!肯定會看看[外部事件](http://davispj.com/2010/09/26/new-couchdb-externals-api.html)功能。 – 2011-03-15 05:29:46