我正在嘗試制定一些安全規則,以允許經過身份驗證的用戶chats根據某些條件訪問(讀/寫)路徑以進行資料驗證。
這是我的規則:
{
"rules": {
"chats": {
"$chatID": {
".read": "data.child('members/' auth.uid).exists()",
".write": "(!data.exists() && newData.child('members').exists() && newData.child('members/' auth.uid).exists()) || data.child('members/' auth.uid).exists()",
}
},
}
}
這是我的 json :
{
"chats/1d771b40-917c-11ec-b57d-a55c6126c658":{
"uid":"1d771b40-917c-11ec-b57d-a55c6126c658",
"name":"",
"updatedAt":1645272534466,
"createdAt":1645272279796,
"senderID":"user1",
"members":{
"user1":true,
"user2":true
},
"created":true,
}
}
我不明白為什么它被拒絕寫入,你能解釋一下哪個值newData確切嗎?
我已經設定了一個非常基本的規則來測驗:
{
"rules": {
"chats": {
"$chatID": {
".read": "data.child('members/' auth.uid).exists()",
".write": "newData.child('members').exists()",
}
}
}
}
那被拒絕了,我也嘗試過:
{
"rules": {
"chats": {
"$chatID": {
".read": "data.child('members/' auth.uid).exists()",
".write": "newData.parent().child('members').exists()",
}
}
}
}
根據檔案,我認為newData如果給定路徑允許寫入,則其中包含將發生的 json 資料,在這種情況下意味著:
{
"uid":"1d771b40-917c-11ec-b57d-a55c6126c658",
"name":"",
"updatedAt":1645272534466,
"createdAt":1645272279796,
"senderID":"user1",
"members":{
"user1":true,
"user2":true
},
"created":true,
}
newData.child('members').exists()那么,如果我理解正確,為什么回傳 false 呢?
我也進行了測驗newData.hasChild('members'),newData.hasChildren(['members'])但都給出了相同的結果(錯誤)。
提前致謝
uj5u.com熱心網友回復:
您應該傳遞應該在更新請求資料中的指定路徑/??位置中的確切 JSON。
所以更新聊天的位置是:chats/{chatId}和資料/有效負載,如下所示:
{
"uid": "1d771b40-917c-11ec-b57d-a55c6126c658",
"name": "",
"updatedAt": 1645272534466,
"createdAt": 1645272279796,
"senderID": "user1",
"members": {
"user1": true,
"user2": true
},
"created": true
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/428760.html
標籤:火力基地 firebase-实时数据库 firebase-安全
