我正在使用Firebase和Angular5构建Web应用程序。我想创建/加入私人房间(受密码保护)。
目前我正处于设计数据库的阶段,并且无法确定如何检查用户输入正确的房间密码而无需从firebase数据库中实际检索它(从而使其完全不安全)。
我是否应该使用云功能。或者可以直接用firebase完成,我错过了什么?
答案 0 :(得分:1)
不需要服务器的一种方法是将密码嵌入到房间的路径中。例如:如果您有一个房间“general”和密码“correcthorsebatterystaple”,那么您可以将其建模为:
messages
general_correcthorsebatterystaple
roomnames
general
用以下方式保护它:
{
rules: {
messages: {
"$roomid": {
".read": true
}
"roomnames: {
".read": true
}
}
}
根据这些规则,任何人都可以阅读房间名称列表。但是,如果您也知道名称的密码,则只能阅读房间的消息。
答案 1 :(得分:1)
你可以在firebase中执行此操作。
假设您的部分数据库的布局如下:
/chatRooms/$roomID/password = $PASSWORD
授予聊天室所有者{/ 1}}的读/写权限。
要成为聊天室的成员,您必须将文档添加到:
/chatRooms/$roomID/password
进行以下验证:
条目的userId必须是当前用户,密码字段必须等于密码。即使用户无法访问数据,验证规则也可以访问数据库中的任何数据。
下面是一个(未经测试的)示例,它将显示基本原理。
简而言之:
代码:
chatRooms/$roomId/users/$userId