我正在努力确保我的数据库安全,我的场景数据如下所示:
receipts: [
{
userId: id,
...
},
{
userId: id,
...
},
...
]
每张收据都有
userId
包含有关其创建者信息的字段。我想返回特定用户的收据列表。为此,我进行了 REST 调用,如下所示:https://[PROJ_NAME].firebaseio.com/receipts.json?orderBy="userId"&equalTo="[USER_ID]"&auth=[TOKEN]
并且在所有设置为打开它的规则上效果很好。但是我想保护我的数据库,以便其他用户无法仅通过更改 URL 来查看所有资源。
在 firebase 文档中,我发现了这样的片段:
"baskets": {
".read": "auth.uid != null &&
query.orderByChild == 'owner' &&
query.equalTo == auth.uid" // restrict basket access to owner of basket
}
这似乎很合理,所以我将它应用于我的配置,但现在它总是失败。这是我的文件的样子:
{
"rules": {
"receipts": {
".indexOn": ["userId"],
".read": "auth.uid != null &&
query.orderByChild == 'userId' &&
query.equalTo == auth.uid"
}
}
}
不幸的是它总是返回
"error" : "Permission denied"
.我因为那件事失去了一整天:(有人可以帮我吗?
最佳答案
火力士在这里
更新 (2018-01-25):此错误现已修复。由于这是服务器端问题,因此无需更新您的 SDK。
.
原答案如下
服务器解释使用 query.orderByChild
的安全规则的方式存在错误。和 query.equalTo
在这一刻。我们正在努力修复。
要暂时解决此问题,您可以结合使用 query.startAt
和 query.endAt
得到相同的结果:
".read": "auth.uid != null &&
query.orderByChild == 'userId' &&
query.startAt == auth.uid &&
query.endAt == auth.uid"
关于rest - Firebase 规则 query.equalTo 在 REST 上总是返回 "Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412285/