2010-08-11 11 views
4

我的系統是Ubuntu 10.04,我已經安裝了CouchDB 1.0。我可以創建管理員或更多管理員,以管理員身份登錄並且一切正常。在CouchDB 1.0中創建用戶時出錯

由於在CouchDB中有0.11的用戶概念不屬於管理員,並且可以擁有對數據庫的細粒度權限。我想創建這樣的用戶。我打開蒲團,我沒有登錄,點擊「註冊」鏈接(右下角)。然後有關於用戶名和密碼的問題。當我填寫表格並提交,還有在 「用戶名」 欄很長的錯誤消息:

註冊錯誤:{gen_server,打電話,[couch_query_servers,{get_proc,{DOC,< < 「_design/_auth」 >>,{1,[< < 84,165,145,147,156,145,146,42,53,239,238,7,235,44,58,114 >>]},{[{< < 「語言」 >>,< < 「的javascript」 >>},{< < 「validate_doc_update」>>,< <「\ n function(newDoc,oldDoc,userCtx){\ n if((oldDoc & & oldDoc.type!=='user')|| newDoc.type!=='user') {\ n throw({forbidden:'doc.type must be user'}); \ n} //我們只允許用戶doc現在\ n \ n if(newDoc._deleted === true){\ n //允許管理員和匹配用戶刪除\ n //不檢查其他字段\ n if((userCtx.roles.indexOf(' _admin')!== -1)|| \ n(userCtx.name == oldDoc.name)){\ n return; \ n} else {\ n throw({forbidden:'只有管理員可能會刪除其他用戶文檔。 ')}; \ n} \ n} \ n \ n if(!newDoc.name){\ n throw({forbidden:'doc.name is required'}); \ n} \ n \ n if(!( newDoc.roles & &(typeof newDoc.roles.length!=='undefined'))){\ n throw({forbidden:'doc.roles must be a array'}); \ n} \ n \ n if( newDoc._id!==('org.couchdb.user:'+ newDoc.name)){\ n throw({\ n禁止:'Doc ID必須是org.couchdb.user:name'的形式\ n} ); \ n} \ n \ n if(oldDoc){//驗證所有更新\ n if(oldDoc.name!== newDoc.name){\ n throw({forbidden:'用戶名無法更改'。} ); \ n} \ n} \ n \ n if(newDoc.password_sha & &!newDoc.salt){\ n throw({\ n禁止: '\ n'); \ n} \ n \ n if(userCtx.roles.indexOf('_ admin')用戶名爲password_sha的用戶必須有一個salt。'+ \ n'請參閱/_utils/script/couch.js例如代碼。 ')=== -1){\ n if(oldDoc){//驗證非管理更新\ n if(userCtx.name!== newDoc.name){\ n throw({\ n禁止:'您可能'\ n}); \ n} \ n //驗證角色更新\ n var oldRoles = oldDoc.roles.sort(); \ n var newRoles = newDoc.roles.sort(); \ n更新您自己的用戶文檔。如果(oldRoles.length!== newRoles.length){\ n throw({forbidden:'只有_admin可以編輯角色}}; \ n} \ n \ n for(var i = 0;我< oldRoles.length;如果(newRoles [i]!== newRoles [i]){\ n throw({forbidden:'只有_admin可以編輯角色}}; \ n} \ n} \ n} else if(newDoc .roles.length> 0){\ n throw {{forbidden:'只有管理員可以設置角色'}); \ n} \ n} \ n \ n //用戶db中沒有系統角色db \ n for(var i = 0; i < newDoc.roles.length; i ++){\ n if(newDoc.roles [i] [0] ===''){\ n throw({\ n禁止:\ n'沒有系統角色(以下劃線開頭)'\ n}); \ n} \ n} \ n \ n //沒有系統名稱作爲名稱\ n if(newDoc.name [0] ==='_'){ \ n「{};}},[],false,[]},{< <」_design/_auth 「>>,< <」1-54a591939c91922a35efee07eb2c3a72「>>}}]}

這是什麼?我如何在CouchDB中創建用戶?

回答

1

看起來您已經擁有系統上的管理員帳戶,CouchDB正在檢測並希望您登錄以創建帳戶。檢查你的local.ini配置文件,看看你有沒有在[管理員]部分定義的管理員 - 如果你是從舊安裝升級,你可能會有一些定義。

以其中一個管理員身份登錄,或者如果您不記得它們,請更改密碼(只需將您的明文密碼替換爲下一個CouchDB啓動時的哈希值即可)。現在重新啓動CouchDB。如果您有管理員帳戶,請以該用戶身份登錄,或者如果您刪除了所有舊帳戶,請點擊註冊以創建一個新帳戶。

乾杯。

+1

是的,我有管理員帳戶。當我以管理員身份登錄時,沒有「註冊」鏈接。如果我刪除管理員帳戶,那麼也沒有「註冊」鏈接(只有您可以用來創建管理員帳戶的鏈接)。當有管理員帳戶,但我沒有登錄並點擊「註冊」 - 發生錯誤。 它在Windows中工作。問題只在Ubuntu上,所以我懷疑某些文件的某些權利。 – amorfis 2010-08-13 08:36:49

5

要創建用戶,PUT JSON文檔到http://localhost:5984/_users/org.couchdb.user:<username>

例如創建一個文件login.json這樣的:

{ 
    "_id": "org.couchdb.user:test", 
    "name": "test", 
    "password_sha": "24e8e07c23d8ae85108468ec4814b2f0fa84edde", 
    "salt": "78f67e252351a56d6e1e6df9ba005239", 
    "roles": [], 
    "type": "user" 
} 

然後將數據放入CouchDB的:

curl -X PUT http://<admin>:<password>@localhost:5984/_users/org.couchdb.user%3Atest -S -s -H "Content-Type: application/json" -d @login.json 

(將<admin><password>替換爲您的couchdb證書。)

現在你應該可以用用戶「test」和密碼「test123」登錄到couchdb。

2

我在debian上有類似的錯誤。我從build-couchdb回購庫中編譯了CouchDB。我可以創建管理員用戶,但不是普通用戶。我也無法運行臨時視圖。通過清除libmozjs1d和erlang-nox並重新編譯來解決它。希望有所幫助。