收藏
回答

云数据库使用自定义安全规则,查询时传入openid的目的是什么?

使用自定义安全规则:

{
  "read": "doc._openid == auth.openid",
  "write": "doc._openid == auth.openid"
}

数据库:
todos : {
  _id : 'xxxxxx',
  _openid :  'xxxxxxxxxxx1234', //这是在开发环境运行app插入数据时自动插入的值,
  data : 'test'
}

查询的时候传入“_openid”作为唯一的参数,可以成功取到数据:
db.collection('todos').where({
    _openid: 'xxxxxxxxxxx1234',
}).get().then(res =>{
    console.log(res);
});

然后我做了几个测试:
1. 把where里传递的_openid值改成其它值,包括瞎写一个值,和写一个其它的正确的openid,都会抛出错误:
db.collection('todos').where({
    _openid: '换了一个openid',
}).get().then(res =>{
    console.log(res);
});

Error: errCode: -502003 database permission denied | errMsg: Permission denied

2. 直接在云管理界面把数据库的_openid记录改成其它值,程序依然传递正确的openid,这次只是像期待的那用取不到记录,但是不抛出错误。

3. 不传递openid,我看到文档里说只要使用建议的自定义安全规则,就要传递openid参数,因此依然提示:
Error: errCode: -502003 database permission denied | errMsg: Permission denied

换句话说,实际的安全规则考虑的是客户端自己上传的openid,外加_openid参数。这样做的目的是什么?

因为如果隐式的由小程序默默的传递openid,就省略了开发者自己获取openid的麻烦事。


最后一次编辑于  2022-12-05
回答关注问题邀请回答
收藏
登录 后发表内容