我必须在Firebase数据库中实施一条规则,以防止未经授权的访问(读取,写入(。
在我的数据库中,我有一个单词集合。每个单词都有一个"uid"字段,对应于本地存储中 authUser 密钥的 uid。
在我对Firebase的REST调用中,我传递了参数uid:
const urlByUser = 'orderBy="uid"&equalTo="'+uid+'"';
我在Firebase db中实现了以下".read"规则,但它不起作用(我获得了未定时的访问权限;当然,我也将访问令牌作为URL中的参数传递(:
{
"rules": {
"words": {
".indexOn": ["uid"],
"$uid": {
".read": "$uid == auth.uid"
}
}
}
}
规则有问题吗?
谢谢
默认情况下,对某个位置的查询要求您具有对该整个位置的读取访问权限。这意味着规则本身不能用于筛选数据。
但是,您可以做的(最近添加的(是编写规则,以确定某个位置允许哪些查询。在您的情况下,这意味着您允许从/words
读取,但前提是他们按auth.uid
查询过滤。因此,你将有一个规则,该规则允许正确筛选的查询,但拒绝未筛选(或错误筛选(的侦听器。
如需详细了解该功能,请参阅 Firebase 文档和 Firebase 博客中的基于查询的安全规则简介。从那里修改:
{
"rules": {
"words": {
".read": "auth.uid != null &&
query.orderByChild == 'uid' &&
query.equalTo == auth.uid"
}
}
}