【问题标题】:Firebase : How to validate a User ID posted by another user.Firebase:如何验证另一个用户发布的用户 ID。
【发布时间】:2016-10-21 23:38:58
【问题描述】:

我正在尝试创建群聊。

  1. 用户创建了一个组。
  2. 按在 Firebase 注册期间创建的 UserID 将用户添加到该组。

** 在将这些用户 ID 存储在某个组节点下之前,如何首先检查用户 ID 是否有效?**

如果有其他方法我可以使用,请告知。

【问题讨论】:

  • 您可以创建有效 UID 的索引。这样你就可以使用类似的方式查询你的火力基地:/users-index/98a6ec42-20ec-48d6-9937-e0c5742eabed;如果存在,则继续将用户 ID 存储在相关的组节点中。
  • @Gregg 你能举例说明我如何在firebase服务器上使用验证规则查询这些吗?如果您不介意,请写下答案。

标签: firebase firebase-realtime-database firebase-authentication firebase-security


【解决方案1】:

就像@Jay 提到的那样,您需要一个结构,例如:

users
   $uid
      ...

如果没有这样的结构,我无法找到解决此问题的任何方法,因此我必须为此目的创建一个。我使用onCreate Firebase function 处理了这样的创建,我只是为每个新用户设置了一些虚拟数据("active": true)。

有了这个结构,您现在可以在.read/.write/.validate 规则中检查它:

"groups": {
    "$group": {
        "members": {
            "$uid": {
                ".validate": "root.child('users/' + $uid).exists()"
            }
        }
    }
}

请注意,我还没有验证确切的代码...

【讨论】:

    【解决方案2】:

    假设您有一个 /users 节点,每个用户都将列在其 uid 下的节点中:

    users
       uid_0
         name: Henry Winkler
         email: henry@thefonz.com
    

    /users 节点是 Firebase 中的典型设计模式,通常在创建 Firebase 帐户的同时添加用户子节点。您可以存储任何您想要的关于用户的信息,以便为您的用户数据提供一站式购物服务。

    【讨论】:

    • 也许我没有提到我想在 firebase 服务器上验证这一点。使用数据库规则。
    • @Relm 用户 ID 由 Firebase 服务器创建,因此始终有效。唯一的例子是如果用户从 Firebase 中删除 - 但是,在这种情况下,您也可以从 /users 节点中删除它们。也许我不明白评论?
    • 它们是有效的,是的,如果它们来自用户,它们可以是任何东西。我想在服务器上再次检查它们。
    • @Relm uid 由 Firebase 服务器在创建用户时创建,并且是 auth.uid 的一部分。它们不是来自用户,它们仅来自 auth.uid。 auth.uid 不能更改,只要用户没有从 /users 节点删除访问权限,它们也将始终有效。
    • 也许我的问题不清楚。当用户浏览要与之聊天的用户时,用户 ID 会发送到用户的设备,并且要将用户添加到聊天组,我必须将他们选择的 ID 发送回服务器以创建具有这些 ID 的组,所以我想先验证 ID。
    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多