javascript !newData.exists()始终拒绝向数据库推送数据

2uluyalo  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(95)

我正在为我的应用程序制作一个帖子系统,!newData.exists()或!data.exists()总是给我权限被拒绝,我也尝试了没有感叹号,但当我这样做时,数据库总是传递我的数据,
我用一个简单的命令推送数据

firebase.database().ref("posts").push().set({
   content: "Test",
   creator: "4p3dAIZKl9WSXpXyGlXOhyn5s692",
   image: "false",
   imageURL: "",
   timestamp: Date.now()
})

虽然我的发帖规则是

"posts":{
   ".read": "auth !== null",
   ".write": "!newData.exists()"
}

但是当我使用firebase时,它总是给我一个错误,即“PERMISSION_DENIED”

s2j5cfk0

s2j5cfk01#

变量newData引用写操作后声明的路径中的数据(假设写操作成功)。由于在posts下写入数据,因此一旦允许该操作,newData.exists()就定义为true。
如果您试图确保用户只能在该路径中不存在帖子的情况下才能写帖子,则需要完全相反的规则(并且在规则中要低一层):

"posts":{
  "$postid": {
    ".read": "auth !== null",
    ".write": "!data.exists()"
  }
}

所以现在您只能写一个特定的新帖子,如果数据库中还没有该路径的数据的话。

相关问题