Angular Firebase:存储房间密码的方法
我正在用Firebase和Angular5构建一个web应用程序。我希望能够创建/加入私人房间(受密码保护) 目前我正处于设计数据库的阶段,无法真正了解如何检查用户输入正确的房间密码,而不实际从firebase数据库检索密码(从而使其完全不安全)Angular Firebase:存储房间密码的方法,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我正在用Firebase和Angular5构建一个web应用程序。我希望能够创建/加入私人房间(受密码保护) 目前我正处于设计数据库的阶段,无法真正了解如何检查用户输入正确的房间密码,而不实际从firebase数据库检索密码(从而使其完全不安全) 我应该为此使用云功能吗。或者可以直接用firebase完成,而我遗漏了什么?一种不需要服务器的方法是将密码嵌入房间的路径中。例如:如果您有一个房间“general”和密码“correcthorsebatterystaple”,那么您可以将其建模为: m
我应该为此使用云功能吗。或者可以直接用firebase完成,而我遗漏了什么?一种不需要服务器的方法是将密码嵌入房间的路径中。例如:如果您有一个房间“general”和密码“correcthorsebatterystaple”,那么您可以将其建模为:
messages
general_correcthorsebatterystaple
roomnames
general
并通过以下方式确保其安全:
{
rules: {
messages: {
"$roomid": {
".read": true
}
"roomnames: {
".read": true
}
}
}
根据这些规则,任何人都可以阅读房间名称列表。但是,如果您还知道房间名称的密码,则只能阅读房间的信息。您可以在firebase中执行此操作 假设DB的一部分布局如下:
/chatRooms/$roomID/password=$password
聊天室所有者被授予对/chatRooms/$roomID/password
的读/写权限
要成为聊天室成员,您必须将文档添加到:
聊天室/$roomId/users/$userId
具有以下验证:
条目的userId必须是当前用户,密码字段必须等于密码。验证规则可以访问数据库中的任何数据,即使用户无法访问数据
下面是一个(未经测试的)示例,将展示基本原则
简言之:
这听起来是一个合理的解决方案。但是,请您对此做进一步解释:“条目的userId必须是当前用户,password字段必须等于password。验证规则可以访问数据库中的任何数据,即使用户无法访问数据。”当用户访问时,我应该写密码吗?聊天室/$roomId/users/$userId我是firebase规则的新手。>密码字段必须等于密码。密码字段必须等于哪个密码?我们如何在不将其写入数据库的情况下提供它?@danilandreyevichbaunov文档在这里解释。如果你读了,你会明白的。用户必须尝试将自己写入
/users
集合。如果他们成功了,他们一定知道密码。我已经看过文件了。仍然不知道用户是如何知道密码的。我们如何检查它?我们在聊天室/$roomId/用户位置上实际写了什么?只是用户ID?@Danilandreyevichbaunov它已经更新了。现在有意义了吗?
"chatrooms" : {
"$room_id" : {
"chat data" : {
".read" : "root.child('/chattrooms/' + $room_id + '/members/' + auth.uid).exists()"
},
"password": {
".read": "false",
".write": "root.child('/chattrooms/' + $room_id).child('admin').val() == auth.uid"
},
"members" : {
"$user_id" : {
".validate": "$user_id == auth.uid && newData.val() == root.child('/chattrooms/' + $room_id + '/password').val()"
}
}
}
}