javascript - Firebase 数据库规则:.exists() 始终为真
问题描述
我试图让人们在游戏中推荐朋友。添加多个朋友有好处,我试图避免利用添加的随机用户名。所以我想在他们将用户添加到他们的列表之前检查用户是否实际存在并且用户使用他们的推荐代码注册。
这是我的数据库结构的示例:
"friends": {
"qwerty12345": {
"friend1": {},
"friend2": {},
"friend3": {},
"friend4": {},
}
},
"users": {
"qwerty12345": {},
"salamander12345": {},
"harrypotter12345": {}
}
所以,有了上面的结构;
当有人注册时,会设置一个朋友推荐人。这是推荐他们的朋友的“帐户 uid”。我想要做的是将当前用户uid添加为朋友>推荐朋友的孩子。
所以,假设用户pikachu12345
从他们的朋友发送的链接注册qwerty12345
。结构将如下所示:
"friends": {
"qwerty12345": {
"pikachu12345": {},
}
},
如果它friends > qwerty12345 > pikachu12345
存在qwerty12345
于users
.
我设置了这个规则:
"friends": {
"$user": {
".write": "$user === newData.child('account_uid').val() && root.child('users').child(newData.child('account_uid').val()).exists()"
}
},
编辑: newData.child('account_uid').val() = 指的是正在传递的数据对象(下面),这评估为
qwerty12345
但是,当我设置用户表hercule12345
中不存在的推荐朋友时。它仍然将其添加到朋友树中。
为什么它总是评估真实?
编辑,如果它是相关的,这是使用云函数编写的:
var data = {
account_uid: "qwerty12345",
current_user:"pikachu12345"
}
admin.database().ref(`/friends/${data.account_uid}/${data.current_user}`).set(data)
解决方案
推荐阅读
- node.js - 尝试使用 VSTS 构建 Electron 应用程序失败,提示“错误请尝试以 root/管理员身份再次运行此命令。”
- wxpython - 在面板中使用 wxPython SpeedMeter
- firebird - Flamerobin 未连接到 Firebird 数据库(消息:-902 isc_attach_database 失败)
- python - 如何在没有 python.exe 的情况下运行 python 脚本
- cordova - 所有文件夹/文件都会被推送到应用程序文件吗?
- python - GitPython:合并远程和本地分支以检查是否存在合并冲突
- git - 用于获取本地最新更改的 Git 命令
- dart - 具有 Maps 的 Null 感知运算符
- jquery - 如何使用 jQuery 为小空间中的大文本实现文本轮播?
- jsf - PrimeFaces 推送到 OmniFaces 推送迁移问题