【发布时间】:2018-09-07 12:18:34
【问题描述】:
我是 Firebase 规则的新手。而且我无法将数据写入当前登录的用户节点。 我的数据库结构是,
userdata: {
profile: {
Lp6Sj763bVUXlisPJyaLM3gbns73: {
name: "sample"
avatar: "sample.png",
userid: "albdchalwe"
},
FRw6J6GWK6YbvhuaaHNzPtLRSHJ2: {
name: "sample"
avatar: "sample.png",
userid: "calisdnca"
}
},
additionaldata: {
Lp6Sj763bVUXlisPJyaLM3gbns73: {
notifications: {
0: {
notificationId: "cbawln"
receviedon: 12212
},
1: {
notificationId: "cbawln"
receviedon: 12212
}
}
},
FRw6J6GWK6YbvhuaaHNzPtLRSHJ2: {
notifications: {
0: {
notificationId: "cbawln"
receviedon: 12212
},
1: {
notificationId: "cbawln"
receviedon: 12212
}
}
}
}
并且想要授予与当前登录用户相关的节点的写入权限。我的数据库规则是,
{
rules: {
userdata: {
profile: {
.read: "auth != null",
.indexOn: ["name"]
$userId: {
avatar: {
.write: "$userId == auth.uid"
},
avatar: {
.write: "$userId == auth.uid"
}
userid: {
.write: "$userId == auth.uid && !data.exists()"
}
}
}
}
}
配置文件下的用户节点包含更多节点。我刚刚从用户节点添加了 3 个子节点来了解结构。暂时离开附加数据节点。
我的问题是无法将数据写入配置文件节点。当我在模拟器上运行它时,我得到以下信息,
[
谁能帮我解决这个问题。提前致谢。
【问题讨论】:
-
当您将 UID 设置为
myuid时,您能否检查是否可以仅将字符串值sample.png写入路径/userdata/profile/myuid? -
抱歉@FrankvanPuffelen 迟到了,不,我不能。
-
嗯...这听起来出乎你的意料。您可以更新您的问题以显示屏幕截图吗?
-
我认为@Tony 编辑的答案是正确的。但我在用户节点下有大约 20 个子节点。那么如何保存每个键,如
db.object('userdata/profile/'+userId+'/avatar').set('sample.png')。目前我的实现是db.object('userdata/profile/'+userId).set({avatar:'sample.png', email:'sampl@sample.com'}),这只是一个例子,有很多键。我无法为每个条目定义确切的路径。
标签: javascript firebase firebase-realtime-database firebase-security