【发布时间】:2020-04-08 04:29:52
【问题描述】:
我的用户数据库如下所示:
root
users
453453452
name: user1
email: email@example.com
permissions: [1,2,3]
457575684
name: user2
email: email2@example.com
permissions: [1,2,3]
234235346
123245346
436286785
474574725
我要做的是允许写入/users 和用户节点/users/453453452,但防止删除用户表或任何用户节点。
我尝试了什么:
{
"rules": {
"users": {
".read": false,
".write": "newData.exists() && newData.val() != null",
"$user": {
".read": true,
".write": "newData.exists() && newData.val() != null",
}
}
}
}
如果我向/users/453453452.json 发送删除请求,我仍然可以删除任何节点。
我能得到一些帮助吗?
编辑:
1- 成功购买后将用户添加到数据库,其中userID 是用户电子邮件地址的哈希唯一标识符。
fetch(myAPI + "/" + userID + ".json", {
method: 'PUT',
headers: {'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify({"name": userName,"email": userEmail, "order_id": orderID})
});
我可以轻松地使用 POSTMAN 向 myAPI + "/" + userID + ".json" 发送 DELETE 请求以删除我试图避免的所选记录,甚至向 /users 发送一个空数组,这将擦除整个数据库。
【问题讨论】:
-
这听起来很意外。您是否以任何方式验证您的 REST 客户端?
-
不,我不是。我们正在努力使应用程序尽可能简单,在我们的场景中,我们不能要求用户登录或验证。
-
知道了。我“希望”你传递了一个 OAuth 令牌,因为这可以解释。你能用你做的确切电话的例子来编辑你的问题吗?我将尝试重现此问题,并且可能希望使用您的实现作为我的参考。
-
我编辑了这个问题,我希望编辑足够有用。
-
你能找到办法吗,弗兰克?
标签: javascript firebase-realtime-database firebase-security