Firebase数据库规则:can';无法写入数据库
我试图设定一些重要的任务,但我无法解决我的问题。我被告知,如果我向房间添加写入规则,那么我将覆盖我的房间/$roomID/ingame规则 我想做的是 由身份验证用户创建文件室。 仅由文件室的创建者设置/更新文件室的ingame。(行得通) 规则:Firebase数据库规则:can';无法写入数据库,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我试图设定一些重要的任务,但我无法解决我的问题。我被告知,如果我向房间添加写入规则,那么我将覆盖我的房间/$roomID/ingame规则 我想做的是 由身份验证用户创建文件室。 仅由文件室的创建者设置/更新文件室的ingame。(行得通) 规则: { "rules": { ".read": true, "user": { ".indexOn": "displayname" }, "room": { "$roomID": {
{
"rules": {
".read": true,
"user": {
".indexOn": "displayname"
},
"room": {
"$roomID": {
"ingame":{
".write": "data.parent().child('creatorUid').val() == auth.uid"
}
}
}
}
}
let user = firebase.auth().currentUser
dbRoomRef.push().then((room) => {
room.set({
creatorUid: user.uid,
ingame: false,
})
}).catch(function(err) {
console.log(err.message)
}
)
如何调用以创建新房间:
{
"rules": {
".read": true,
"user": {
".indexOn": "displayname"
},
"room": {
"$roomID": {
"ingame":{
".write": "data.parent().child('creatorUid').val() == auth.uid"
}
}
}
}
}
let user = firebase.auth().currentUser
dbRoomRef.push().then((room) => {
room.set({
creatorUid: user.uid,
ingame: false,
})
}).catch(function(err) {
console.log(err.message)
}
)
错误消息(如预期):
FIREBASE警告:设置为/room/-L572bnuRv0\u vntko-Bd失败:权限被拒绝
谢谢。错误消息说您正在尝试写入
/room/-L572bnuRv0_vntko-Bd
,没有写入权限。这是正确的,因为您的规则只允许写入/room/-L572bnuRv0_vntko-Bd/ingame
如果在创建文件室时已设置了creatorUid
,则不必将其包含在write语句中,只需执行以下操作即可:
room.child("ingame").set(false);
如果您试图允许每个人创建一个新房间(或写入现有房间),只要他们是所有者,您需要将规则设置得更高一级:
"room": {
"$roomID": {
".write": "newData.child('creatorUid').val() == auth.uid"
}
}
谢谢你,弗兰克!这就是我要找的。我得到了它。祝您有个美好的一天。