Authentication 如何授权用户只更新与CouchDB中的“id”匹配的文档?
我正在尝试建立一个配置文件数据库模型,其中每个配置文件都对经过身份验证的用户公开,并且每个用户只能更新自己的配置文件 每个配置文件文档Authentication 如何授权用户只更新与CouchDB中的“id”匹配的文档?,authentication,authorization,couchdb,pouchdb,cloudant,Authentication,Authorization,Couchdb,Pouchdb,Cloudant,我正在尝试建立一个配置文件数据库模型,其中每个配置文件都对经过身份验证的用户公开,并且每个用户只能更新自己的配置文件 每个配置文件文档\u id都将是注册用户的电子邮件,我模拟了以下验证\u doc\u更新功能: function(newDoc, oldDoc, userCtx, secObj) { var id = userCtx.roles[0].substring(5); if (newDoc._id !== id) { throw({forbidden: "One ca
\u id
都将是注册用户的电子邮件,我模拟了以下验证\u doc\u更新
功能:
function(newDoc, oldDoc, userCtx, secObj) {
var id = userCtx.roles[0].substring(5);
if (newDoc._id !== id) {
throw({forbidden: "One can only update one's self document."});
}
}
我对数据库进行了测试,结果正如我所预期的那样完美地工作。我说得对吗?是否存在任何缺陷或漏洞
(我用它在用户中创建和登录)这里的键是SuperLogin。它在
\u users
数据库中创建一个文档来表示给定用户的会话
当用户登录时,将插入一个如下所示的文档:
{
"_id": "org.couchdb.user:iwn9IpwNR4i0wrxmYcGarg",
"_rev": "1-0f36c9e220c41fe54726cdd01adcdcf2",
"password_scheme": "pbkdf2",
"iterations": 10,
"type": "user",
"name": "iwn9IpwNR4i0wrxmYcGarg",
"user_id": "aasaaaaaaaaaaaaaaaaaaaandremiramor@gmail.com",
"expires": 1458027109739,
"roles": [
"user:aasaaaaaaaaaaaaaaaaaaaandremiramor@gmail.com",
"user"
],
"derived_key": "9a6cfaaac2249ef74fba599c3fbede65a48dcd32",
"salt": "1ef2689337699061b9460f6f68f63f28"
}
角色
数组也是使用用户名创建的。由于我已将其配置为使用电子邮件作为用户名({emailUsername:true}
),因此电子邮件可以匹配为相应的文档\u id
是的,这是一个可行的解决方案。为了安全起见,我会检查角色前缀是否为“user:”,也许您还可以允许角色为“\u admin”的用户编辑任何文档
您的解决方案可能存在的一个问题是,如果您使用电子邮件作为id,您可能会公开所有用户的电子邮件地址。但是,如果您在特定的用例中对此没有异议,那么您的解决方案就可以了