我必须在Firebase数据库中实施规则,以防止未经授权的访问(读取,写入)。
在我的数据库中,我有一些单词。每个单词都有一个“uid”字段,对应于本地存储中authUser键的uid。
在我的REST调用Firebase中,我传递参数uid:
const urlByUser = 'orderBy="uid"&equalTo="'+uid+'"';
我在Firebase数据库中实现了以下“.read”规则,但它不起作用(我得到了无法访问的权限;当然我也将访问令牌作为URL中的参数传递):
{
"rules": {
"words": {
".indexOn": ["uid"],
"$uid": {
".read": "$uid == auth.uid"
}
}
}
}
规则中有什么问题吗?
感谢
答案 0 :(得分:1)
默认情况下,对某个位置的查询要求您具有对该整个位置的读取权限。这意味着规则本身不能用于过滤数据。
然而,您可以执行的操作(最近添加的内容)是写入规则,用于确定在特定位置允许哪些查询。在您的情况下,这意味着您允许从/words
读取,但只有才能通过auth.uid
查询过滤。因此,您将拥有允许正确筛选查询的规则,但拒绝未经过滤(或错误过滤)的侦听器。
在Firebase documentation中的Introducing Query-based Security Rules和Firebase博客上详细了解该功能。从那里修改:
{
"rules": {
"words": {
".read": "auth.uid != null &&
query.orderByChild == 'uid' &&
query.equalTo == auth.uid"
}
}
}