【发布时间】:2017-12-29 10:59:37
【问题描述】:
前段时间我写了一个简单的聊天应用程序来帮助我学习 node 和 socket.io,我最近一直在研究 firebase 作为应用程序/网站的平台,我遇到了一个有趣的问题,我不能解决。在应用程序内会有一个聊天应用程序,会有频道和所有好东西,困难的是会有私人聊天,两个用户可以私下交谈。计划是将聊天存储在 firebase 数据库中。现在,我可以根据用户是否经过身份验证轻松限制对 firebase 数据库的访问,甚至限制对经过身份验证的用户和拥有该配置文件的用户的用户配置文件访问,但我正在尝试弄清楚如何限制对“私人聊天”的访问" "chat" 数据库的子项,仅限于该对话中的 2 个用户。 我在想数据库看起来像这样......
{
"chat": {
"channels": ['topics', 'current', 'blah', 'blah', 'blah'],
"{PRIVATE_CHAT_UID_GOES_HERE}": {
"users": ["{USER_ID_1}", "{USER_ID_2}"],
"messages": [{"from": "{USER_ID}", "message": "Hi there"},{...}]
"createdOn": "DATE GOES HERE"
},
"{PRIVATE_CHAT_UID_GOES_HERE}": {
"users": ["{USER_ID}", "{USER_ID}"],
"messages": [{...}, {...}],
"createdOn": "DATE GOES HERE"
}
}
}
然后我会将对子项(私人聊天 id)的访问限制为仅“用户”数组中的用户。这样,除非他们在该特定聊天中,否则没有人可以读取或写入该特定聊天。我只是不知道该怎么做。 我知道你可以做类似的事情
".read": "auth !== null && auth.uid = $uid"
但我认为这不适用,因为它将使用限制为 uid 的所有者,并且当我将孩子添加到“聊天”以开始用户之间的私人聊天时,uid 会自动生成。
这样的事情是否可能,或者是否有更好的方法来构建数据,从而可以轻松地限制只有参与对话的 2 个用户才能访问? 我试图避免让 node.js 服务器坐在那里只是验证用户是否在聊天中,当您可以列出数据库并直接从数据库处理身份验证时,这似乎是一个毫无意义的开销。我非常乐意提供我所拥有的代码示例,尽管我不知道它们是否相关。提前感谢您的帮助。
【问题讨论】:
标签: javascript firebase firebase-realtime-database firebase-security ionic3