当前位置: 首页 > 知识库问答 >
问题:

Firebase:存储房间密码的方法

艾泽语
2023-03-14

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

目前,我正处于数据库设计阶段,无法真正了解如何在不从firebase数据库中实际检索的情况下检查用户输入的正确房间密码(从而使其完全不安全)。

我应该为此使用云功能吗。或者直接用firebase就可以了,而我错过了什么?

共有2个答案

皇甫德庸
2023-03-14

一种不需要服务器的方法是将密码嵌入房间的路径中。例如:如果您有一个房间“general”和密码“correcthorsebatterystaple”,那么您可以将其建模为:

messages
    general_correcthorsebatterystaple
roomnames
    general

并通过以下方式确保其安全

{
  rules: {
    messages: {
      "$roomid": {
        ".read": true
      }
    "roomnames: {
      ".read": true
    }
  }
}

根据这些规则,任何人都可以阅读房间名称列表。但是,只有知道房间名称的密码,你才能阅读房间的信息。

柏明亮
2023-03-14

你可以在firebase中完成。

假设数据库的一部分布局如下:

######################################################################################################

聊天室所有者被授予对/chatRooms/$roomID/password的读/写权限。

要成为聊天室的成员,您必须将文档添加到:chattrooms/$roomId/users/$userId,并进行以下验证:

条目的userId必须是当前用户,密码字段必须等于密码。验证规则可以访问数据库中的任何html" target="_blank">数据,即使用户无法访问数据。

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

总之:

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

代码:

"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()"
      }
    }
  }
}
 类似资料:
  • 存储密码 用户名和密码组合必须存储在某处。以下列表提到了一些受欢迎的地方: 文字:你现在应该熟悉这种方法。 SQL数据库:FreeRADIUS包含与SQL数据库交互的模块。 MySQL非常受欢迎,并且广泛用于FreeRADIUS。 目录:Microsof的Actve目录或Novell的电子目录是典型的企业级目录。OpenLDAP是一种流行的开源替代方案。 FreeRADIUS可以使用的用户文件和S

  • 过去一段时间以来, 许多的网站遭遇用户密码数据泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN,该事件横扫整个国内互联网,随后又爆出多玩游戏800万用户资料被泄露,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件给用户的网上生活造成巨大的影响,人人自危,因为人们往往习惯在不同网站使用相同的密码,所以一家“暴库”,全部

  • 使用 phpass 库来哈希和比较密码 经 phpass 0.3 测试,在存入数据库之前进行哈希保护用户密码的标准方式。 许多常用的哈希算法如 md5,甚至是 sha1 对于密码存储都是不安全的, 因为骇客能够使用那些算法轻而易举地破解密码。 对密码进行哈希最安全的方法是使用 bcrypt 算法。开源的 phpass 库以一个易于使用的类来提供该功能。 示例 <?php // Include ph

  • 我正在使用Node编写一个交易应用程序 有问题的经纪账户有一个REST API,您可以在其中发布该系统的登录名和密码。该API不提供SSO或OAuth作为身份验证选项。身份验证的唯一方法是发布uid和密码。 所以这里涉及到两个登录:一个是我的应用程序,另一个是完全独立的经纪账户登录。每个登录都使用不同的用户ID和密码。 我遇到的问题是如何存储经纪账户的密码。我知道存储密码是个坏主意。但是,如果我存

  • 我们正在使用firebase实时数据库,我正在考虑在本地实现一个缓存来减少重复调用。

  • 问题内容: 我看到的每个示例都说要使用强密码,但是他们只是在源代码中添加了密码。在我看来,这似乎不太正确。 是否可以作为当前帐户向密钥库进行身份验证,因此不涉及密码? 如果不可能,我有一个要求,就是不要将密码存储在源代码中,这是完全可以接受的,但是似乎在某些时候密码需要成为方程式的一部分,有人可以指出我最安全的方式来进行加密吗?处理这个(事情? 我很想在构建过程中添加密码,但是然后我在构建服务器上