我的系统是ubuntu 10.04,我安装了CouchDB 1.0。我可以创建管理员或更多管理员,以管理员身份登录,一切正常。
自CouchDB中的0.11以来,用户的概念不是管理员,并且可以拥有对数据库的细粒度权限。我想创建这样的用户。我打开Futon,我没有登录,然后点击“注册”链接(右下角)。然后有关于用户名和密码的问题。当我填写表单并提交表单时,“用户名”字段下会显示很长的错误消息:
注册错误:{gen_server,呼叫,[couch_query_servers,{get_proc,{DOC,<< “_设计/ _auth” >>中{1,并[d< 84,165,145,147,156,145,146,42,53,239,238,7, 235,44,58,114>>]},{[{<<“language”>>,<<“javascript”>>},{<<“validate_doc_update”> >,<<“\ n function(newDoc,oldDoc,userCtx){\ n if((oldDoc&& oldDoc.type!=='user')|| newDoc.type!=='user' ){\ n throw({forbidden:'doc.type必须是用户'}); \ n} //我们现在只允许用户文档\ 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必须是a n array'}); \ n} \ n \ n if(newDoc._id!==('org.couchdb.user:'+ newDoc.name)){\ n throw({\ n forbidden:'Doc ID must形式为org.couchdb.user:name'\ n}); \ n} \ n \ n if if(oldDoc){//验证所有更新\ n if(oldDoc.name!== newDoc.name){\ n throw({forbidden:'用户名不能改变。'}); \ n} \ n} \ n \ n if(newDoc.password_sha&& !newDoc.salt){\ n throw({\ n forbidden:'password_sha的用户必须有一个盐。'+ \ n'请参见/_utils/script/couch.js,例如代码。'\ n}); \ n } \ n \ n if(userCtx.roles.indexOf('_ admin')=== -1){\ n if(oldDoc){//验证非管理员更新\ n if(userCtx.name!== newDoc。 name){\ n throw({\ n forbidden:'您只能更新自己的用户文档。'\ n}); \ n} \ n //验证角色更新\ n var oldRoles = oldDoc.roles.sort() ; \ n var newRoles = newDoc.roles.sort(); \ n \ n if if(oldRoles.length!== newRoles.length){\ n throw({forbidden:'只有_admin可编辑角色'}); \ n } \ n \ n for(var i = 0; i< oldRoles.length; i ++){\ n if(oldRoles [i]!== newRoles [i]){\ n throw({forbidden:'only _admin may编辑角色'}); \ n} \ n} \ n}否则if(newDoc.roles.length> 0){\ n throw({forbidden:'only admin可设置角色'}); \ n } \ n} \ n \ n //用户db \ n中没有系统角色(var i = 0; i< newDoc.roles.length; i ++){\ n if(newDoc.roles [i] [0] ===''){\ n throw({\ n forbidden:\ n'没有系统角色(启动机智)用户db。'\ n}); \ n} \ n} \ n \ n //没有系统名称作为名称\ n if(newDoc.name [0] ==='_'){\ n throw({forbidden:'用户名不能以下划线开头。'}); \ n} \ n} \ n“>>}]},[],false,[]},{<<”_ design / _auth“>>,<<”1-54a591939c91922a35efee07eb2c3a72“>>}}}}
这是什么?如何在CouchDB中创建用户?
答案 0 :(得分:5)
要创建用户,请将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。
答案 1 :(得分:2)
我在debian上有类似的错误。我从build-couchdb repo编译了CouchDB。我可以创建管理员用户而不是普通用户。我也无法运行临时视图。通过清除libmozjs1d和erlang-nox并重新编译来解决它。希望有所帮助。
答案 2 :(得分:1)
看起来你已经在系统上有一个管理员帐户,CouchDB正在检测并期望你登录以创建帐户。检查您的local.ini配置文件,看看您是否在[admins]部分中定义了任何管理员 - 如果您从旧安装升级,则可能会定义一些。
以其中一个管理员身份登录,或者如果您不记得密码,请更改密码(只需用明文密码替换,并在下次CouchDB启动时进行哈希处理)。现在重启CouchDB。如果您有管理员帐户,则以该用户身份登录,或者如果您删除了所有旧帐户,则单击注册以创建新帐户。
干杯。
答案 3 :(得分:1)
我自己进入这个问题,发现这是因为我的name
和_id
字符串的名称部分不匹配:
curl -X PUT https://admin:password@server:6984/_users/org.couchdb.user:dan \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "Dan", "password": "password", "roles": [], "type": "user"}'
这不起作用,因为来自org.couchdb.user: dan 的_id
dan 的名称部分与name
不匹配提供 Dan 。
以下情况有效,因为用户名匹配(现在都是Dan)
curl -X PUT https://admin:password@server:6984/_users/org.couchdb.user:Dan \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "Dan", "password": "password", "roles": [], "type": "user"}'