我正在修改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登录。我做错了什么?
答案 0 :(得分:1)
如果没有您注释掉的行,则无法从/posts
读取。能够查询/posts
。你必须能够从中读取。
对于Firebase新手的开发人员来说,这是一个常见的反复出现障碍:规则不能用于过滤数据。我建议您在Firebase documentation和许多questions on the topic中阅读。
答案 1 :(得分:0)
Firebase查询全部或全部。如果您正在倾听" / posts" Firebase数据库的节点,如果有权查看该节点下的所有数据,则用户只能获取任何数据。您的规则允许作者阅读自己的帖子,但不允许其他人阅读。这意味着整个查询将导致身份验证错误。
任何时候auth
不为空,表示用户已通过身份验证。由于任何经过身份验证的用户都应该能够阅读帖子,只需将阅读权交给" auth!= null"就足够了。请注意,这只允许登录用户阅读帖子,而不是编辑它们。