在CouchDB 1.0中创建用户时出错

amo*_*fis 5 couchdb

我的系统是ubuntu 10.04,我安装了CouchDB 1.0.我可以创建管理员或更多管理员,以管理员身份登录,一切正常.

从CouchDB中的0.11开始,用户的概念不是管理员,并且可以拥有对数据库的细粒度权限.我想创建这样的用户.我打开Futon,我没有登录,然后点击"注册"链接(右下角).然后有关于用户名和密码的问题.当我填写表单并提交表单时,"用户名"字段下会显示很长的错误消息:

注册错误:{gen_server,call,[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 >>]} ,{[{<<"language">>,<<"javascript">>},{<<"validate_doc_update">>,<<"\n function(newDoc,oldDoc,userCtx){\n if((oldDoc) && oldDoc.type!=='user')|| newDoc.type!=='user'){\n throw({forbidden:'doc.type必须是user'}); \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 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必须是数组'}); \n } \n \n if(newDoc._id!==('org.couchdb.user:'+ newDoc.name)){\n throw({\n forbidden:'Doc ID必须是org.couchdb格式. user:name'\n}); \n} \n \n if(oldDoc){//验证所有更新\n if(oldDoc.name!== newDoc.name){\n throw({forbidden:'Usernames无法更改.'}); \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(oldRoles.length!== newRoles.length){\n throw({forbidden:'只有_admin可以编辑角色'}); \n} \n \n for(var i = 0; i <oldRoles.长度; i ++){\n if(oldRoles [i]!== newRoles [i]){\n throw({forbidden:'只有_admin可以编辑角色'}); \n} \n} \n}其他如果(newDoc.roles.length> 0){\n throw({forbidden:'Onlysort(); \n var newRoles = newDoc.roles.sort(); \n \n if(oldRoles.length!== newRoles.length){\n throw({forbidden:'only _admin may editing roles'}) ; \n} \n \n for(var i = 0; i <oldRoles.length; i ++){\n if(oldRoles [i]!== newRoles [i]){\n throw({forbidden:'Only _admin可以编辑角色'}); \n} \n} \n} else if(newDoc.roles.length> 0){\n throw({forbidden:'Onlysort(); \n var newRoles = newDoc.roles.sort(); \n \n if(oldRoles.length!== newRoles.length){\n throw({forbidden:'only _admin may editing roles'}) ; \n} \n \n for(var i = 0; i <oldRoles.length; i ++){\n if(oldRoles [i]!== newRoles [i]){\n throw({forbidden:'Only _admin可以编辑角色'}); \n} \n} \n} else if(newDoc.roles.length> 0){\n throw({forbidden:'Onlyadmin可以设置角色'}); \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中创建用户?

小智 5

要创建用户,请将JSON文档PUT到 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"
}
Run Code Online (Sandbox Code Playgroud)

然后将数据输入couchdb:

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

(替换<admin><password>使用您的couchdb凭据.)

现在您应该能够使用用户"test"和密码"test123"登录couchdb.


Sam*_*bee 1

看起来您在系统上已经有一个管理员帐户,CouchDB 正在检测该帐户并希望您登录以创建帐户。检查您的 local.ini 配置文件,看看您是否在 [admins] 部分中定义了任何管理员 - 如果您从旧安装升级,您可能会定义一些管理员。

以这些管理员之一的身份登录,或者如果您不记得密码则更改其密码(只需将 has 替换为您的明文密码,下次 CouchDB 启动时它将被散列)。现在重新启动 CouchDB。如果您有管理员帐户,请以该用户身份登录,或者如果您删除了所有旧帐户,请单击“注册”以创建一个新帐户。

干杯。