为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase 规则 - 查询中的只读值

Firebase 规则 - 查询中的只读值

慕神8447489 2021-12-23 10:33:11
我在数据库的验证部分单独存储用户名。只有用户名,这样用户在注册时,可以在注册前输入用户名并查看用户名是否可用。现在的规则是 ".read": true ,这样基本上任何人都可以轻松访问数据库中的所有用户名。我想阻止这种情况,但我不知道该怎么做,因为我不能使用 auth != null 规则,因为尚未创建用户。我唯一的想法是只允许读取请求的用户名,即某些东西 firebase.database().ref('Validations/Usernames')            .orderByChild('name')            .equalTo(username)            .once('value')            .then(snapshot => ....然后使用这样的规则:"$name": {   ".read": "query.equalTo == $name"}即允许只读从客户端检查的用户名。现在,这失败了,因为对于所有其他人,它使用 orderByChild 进行检查,它无权访问这些。是否有一些类似的方法可以只读取请求从客户端读取的值?或者,在他创建帐户之前,我应该采用其他完全不同的方式进行用户名验证?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

如果您只想让用户检查他们输入的用户名是否已被声明,他们不会对整个Validations/Usernames节点进行读取访问。相反,他们只需要对特定子项下的读取访问权限。


为此,请确保使用用户名作为 下的键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()。


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号