firebase - 如何为群组消息应用设置 Firebase 数据库规则
问题描述
我为群组消息应用程序设置了 Firebase 数据库规则。但是现在,即使经过身份验证的用户尝试发送消息,它也不会显示出来。
我正在开发一个群组消息应用程序。代码可以在以下链接中找到。创建应用程序时,我使用的是 Firebase 数据库的默认规则。但现在我正在尝试设置规则,以便成员节点中可用的所有 uid 都可以查看或向该特定组发送消息。以下是我创建的最新规则集。以下是我创建计划后的详细数据库结构。请注意,我正在使用 Firebase 电话身份验证。出于这个原因,我正在创建一个用户节点来跟踪每个注册号码的 uid。当用户选择要添加到组中的成员时,我会根据他们各自的 uid 检查这些数字,然后将这些 uid 添加到成员的节点中。
{
"rules": {
"plan":{
"$planID":{
"messages":{
".read":"data.parent().child('members').child(auth.uid).exists()",
".write":"data.parent().child('members').child(auth.uid).exists()"
}
}
}
}
}
我希望已添加到成员节点的经过身份验证的用户能够阅读和发送消息,但在上述规则发布后,即使是注册用户自己也无法创建新组或阅读消息。
解决方案
当将每个子节点定义为整数时,从零开始(就像您在 中所做的那样
members
),Firebase 会自动将整个节点解释为对象数组,在这种情况下您不能将它们视为全部(通过调用child(auth.uid)
)。引用链接:
特别是,如果所有键都是整数,并且对象中 0 到最大键之间的键中有一半以上具有非空值,则 Firebase 会将其呈现为数组。后一部分很重要,请牢记。
由于您的数据结构中就是这种情况,因此所有
members
' 子节点不再被视为节点。它们是数组项,因此不是children
.members
即使不是这种情况,它们都是子节点 - 你似乎调用
child(auth.uid)
的auth.uid
是一个整数:你的“子节点”都是Integers,而auth.uid
被定义为String。
推荐阅读
- node.js - 代表站点用户发送电子邮件
- javascript - 当 Django 数据库被更改时触发 Javascript 中的函数
- java - 如何检查检索密钥是否以前检索过并充当?
- c++ - 这种对共享指针向量的回退是否会导致内存泄漏?
- android - kotlin 中 RecyclerView 内的 RecyclerView
- php - 无法修复 404 NOT FOUND 错误,因为我无法查看和访问 Elastic beanstalk 创建的 ec2 中的文件
- powershell - Power BI 部署管道 - 通过 API 比较功能
- angular - ngrx 效果:期望两个动作都完成
- android-studio - 如何保存深层链接的参数
- git - 在 git rebase -i 中只使用一个提交评论