如何将只读限制为Firebase数据库的授权用户?

时间:2017-06-17 03:07:35

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

我正在修改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登录。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果没有您注释掉的行,则无法从/posts读取。能够查询/posts。你必须能够从中读取。

对于Firebase新手的开发人员来说,这是一个常见的反复出现障碍:规则不能用于过滤数据。我建议您在Firebase documentation和许多questions on the topic中阅读。

答案 1 :(得分:0)

Firebase查询全部或全部。如果您正在倾听" / posts" Firebase数据库的节点,如果有权查看该节点下的所有数据,则用户只能获取任何数据。您的规则允许作者阅读自己的帖子,但不允许其他人阅读。这意味着整个查询将导致身份验证错误。

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