Firebase:存储密码的方法

时间:2017-12-11 21:20:42

标签: angular firebase angularfire2

我正在使用Firebase和Angular5构建Web应用程序。我想创建/加入私人房间(受密码保护)。

目前我正处于设计数据库的阶段,并且无法确定如何检查用户输入正确的房间密码而无需从firebase数据库中实际检索它(从而使其完全不安全)。

我是否应该使用云功能。或者可以直接用firebase完成,我错过了什么?

2 个答案:

答案 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必须是当前用户,密码字段必须等于密码。即使用户无法访问数据,验证规则也可以访问数据库中的任何数据。

下面是一个(未经测试的)示例,它将显示基本原理。

简而言之:

  1. 只有聊天室管理员可以设置密码。没有人可以阅读它。
  2. 如果用户的uid在成员集合中,则可以读取聊天数据
  3. 要向集合添加成员,他们必须写一个密码,等于(当时)房间密码
  4. 代码:

    chatRooms/$roomId/users/$userId