我的实时数据库结构如下:
我的应用
我的规则设置为:
{
"rules": {
"users": {
"$uid": {
".read" : "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"tasks": {
"$uid": {
".read" : "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"chats": {
"$uid": {
".read" : "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
所以我的观点是登录的用户可以读取和写入存储他们的任务和聊天记录的数据库。但是我当前的规则集拒绝了我的应用程序中某些功能的许可。另外我的聊天用户不显示,但我的用户任务显示和读写。
例如,当用户登录时,user-> online 设置为 true,但是当我注销时,它不是变为 false,而是在我的 chrome 调试中出现错误,它说明了一些类似的内容:@firebase/database:FIREBASE 警告:在 /users/(user ID) 更新失败:permission_denied
所以我不明白为什么一旦用户注销它就没有写入数据库的权限。如果我将规则设置为像
一样打开{
"rules": {
".read": true,
".write": true
}
}
然后在线状态有效,并显示我的聊天记录,但显然我的数据库暴露的方式没有安全性。
我的应用是使用 firebase 实时数据库的 JavaScript 应用。
编辑: 我将规则设置为这些,应用程序正常运行,从数据库读取写入时没有任何错误,我不确定这些规则的安全性,但它们暂时有效。退出时更新用户在线状态,显示用户聊天内容,聊天内容等
{
"rules": {
"tasks": {
"$uid" : {
".read" : "auth.uid == $uid",
".write" : "auth.uid == $uid"
}
},
"chats": {
"$uid" : {
".read" : "auth.uid == $uid",
".write" : "auth != null"
}
},
"users": {
".read": "auth != null",
".write" : true,
}
}
}