【问题标题】:How to restrict read only to Authorized users of Firebase Database?如何将只读限制为 Firebase 数据库的授权用户?
【发布时间】:2017-06-17 03:07:34
【问题描述】:

我正在修改FriendlyPix Firebase 示例应用程序,以便只有经过身份验证和授权的用户才能读取节点下的数据。以下是我的实时数据库的数据库规则

 "posts": {
    //  ".read": true, COMMENTED OUT
      "$postId": {
          ".read": "auth.uid === data.child('author').child('uid').val()",
         ".write": "!data.exists() || data.exists() && auth.uid === data.child('author').child('uid').val()", 
//more code

问题是现在登录的用户无法阅读任何帖子(甚至他发布的帖子)。我正在使用 Firebase UI 和 Google 登录。我做错了什么?

【问题讨论】:

  • 你是不是错过了在`“.read”中开始":auth.uid === data.child('author').child('uid').val()" ,. should it be like ".read": "auth.uid === data.child('author').child('uid').val()",`
  • 是的,这是一个错字。我已经修复了...仍然无法读取数据

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


【解决方案1】:

没有你注释掉的那行,没有人可以阅读/posts。能够查询/posts。您必须能够从中读取。

对于刚接触 Firebase 的开发者来说,这是一个经常出现的常见障碍:规则不能用于过滤数据。我建议您阅读 Firebase documentation 和许多 questions on the topic 中的内容。

【讨论】:

    【解决方案2】:

    Firebase 查询全有或全无。如果您正在收听 Firebase 数据库的“/posts”节点,则只有在有权查看该节点下的所有数据的情况下,用户才会获得任何数据。您的规则确实允许作者阅读他们自己的帖子,但不允许其他人阅读。这意味着整个查询将导致身份验证错误。

    任何时候auth 不为空,表示用户已通过身份验证。由于任何经过身份验证的用户都应该能够阅读帖子,因此只需将 read 设置为“auth!= null”就足够了。请注意,这只允许登录用户阅读帖子,而不是编辑帖子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2019-10-03
      相关资源
      最近更新 更多