Firebase规则-只读查询中的值

问题描述 投票:0回答:1

我将用户名分别存储在数据库的验证部分中。只有用户名,因此在用户注册时,他可以输入用户名,并在注册之前查看用户名是否可用。现在的规则是“ .read”:true,这样基本上可以使任何人都可以轻松访问数据库中的所有用户名。我想防止这种情况,但是我不确定该怎么做,因为我不能使用auth!= null规则,因为尚未创建用户。

我唯一的想法是只允许读取所请求的用户名,即某些内容

 firebase.database().ref('Validations/Usernames')
            .orderByChild('name')
            .equalTo(username)
            .once('value')
            .then(snapshot => ....

然后使用如下规则:

"$name": {
   ".read": "query.equalTo == $name"
}

即允许从客户端检查的用户名只读。现在,这失败了,因为对于其他所有对象,它都无法使用orderByChild进行检查。

是否有一些类似的方法可以只读取从客户端读取的值?也许还有其他完全我可以在他创建帐户之前进行用户名验证的方法?

javascript firebase firebase-realtime-database firebase-security-rules
1个回答
1
投票
为此,请确保使用用户名作为Validations/Usernames下的键,所以类似:

"Validations": { "Usernames": { "CosmicSeizure": "uidOfCosmicSeizure", "puf": "uidOfPuf" } }

有了上述规则,您的规则可以是:

"Validations": {
  "Usernames": {
    "$name": {
      ".read": true
    }
  }
}

然后您可以检查用户名是否存在:

firebase.database().ref('Validations/Usernames')
        .child(username)
        .once('value')
        .then(snapshot => ....

然后检查是否为snapshot.exists()

© www.soinside.com 2019 - 2024. All rights reserved.