您将如何防止用户在 Firebase 中伪造用户名?

How would you prevent users from spoofing a username in Firebase?

如何防止用户通过使用有效的身份验证 uid 但错误的身份验证 uid 向 Firebase 发布内容来欺骗用户名 "username"?

我可以只存储 UID,但是我必须让客户端一直查找所有 UID。如果我能以某种方式确保指定的用户名与登录用户的用户名相同,那就太理想了。

理想情况下,我会制定如下规则:

{
    "rules": {
        "chat":{
          "messages":{
            ".read":true,
            ".write":true,
            "$message":{
              ".read":true,
              ".write":true
              ".validate": "newData.child('name').val() == auth.facebook.displayName"
            }
          }
        }
    }
}

但是 auth 变量不包含用户名。

在大多数此类情况下,开发人员将所有用户的完整信息存储在其 Firebase 中的 /users 节点下。例如

/
  users
    twitter:478645678
      username: "puf"
      displayName: "Frank van Puffelen"
  chat
    messages
      -J328764236789
        author: twitter:478645678
        name: "puf"
        message: "Hello world"

使用此结构,您可以将用户名交叉引用到 /users/<uid>/username:

".validate": "newData.child('name').val() == root.child('users').child(auth.uid).child('username').val()"