我想检索用户生成的数据,但在Firebase中获取权限被拒绝错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想检索用户生成的数据,但在Firebase中获取权限被拒绝错误相关的知识,希望对你有一定的参考价值。
为dummyOrders编写的规则:
"rules":
"dummyOrders":
"$dummyid":
".write": "auth!=null && $dummyid.contains(auth.uid)",
".read": "auth!=null && $dummyid.contains(auth.uid)"
虚拟订单的结构:
-LLKkP5GLMkMqy-OvFsY|3wvZGffGY5gUSKlFzhLw7hwXLEi1
cemail: "nateshmbhat1@gmail.com"
cid: "NKGiiChIqCdUcithC48mtuWkaAt1"
cname: "Natesh Bhat"
date: "2018-09-01T15:31:25.060Z"
file_names: "JavaEvaluation.doc,"
message: "Sample testing. "
oid: "Order 230"
status: "requested"
xid: "ybfXhEkmCNbOuAN0XJYE8b84ix93"
xshopName: "SIT Campus Xerox"
当我在Firebase中运行模拟器时,它没有给出任何错误。
我试图从dummyOrders和我上面写的规则中检索数据。
我正在尝试使用以下代码访问数据:
var orderRef = firebase.database().ref('dummyOrders').orderByChild('cid').equalTo(user.uid);
我得到firebase权限被拒绝错误。我是firebase的新手,因此我需要一些帮助来了解如何检索我试图访问的数据。
dummyorder id是:
-LLKkP5GLMkMqy-OvFsY | 3wvZGffGY5gUSKlFzhLw7hwXLEi1
数据来自3wvZGffGY5gUSKlFzhLw7hwXLEi1
的UID,我需要在他的个人资料中显示该数据。
-LLKkP5GLMkMqy-OvFsY
是我需要显示此订单的一些商店。
所以对于dummyOrder我给了id
shopid |用户标识
请告诉我这里的错误是什么。我无法理解为什么我收到权限被拒绝错误以及如何解决它。
谢谢你的帮助。
首先要注意的是Firebase rules are not filters。因此,当您尝试从firebase.database().ref('dummyOrders')
获取数据时,它将检查用户是否在该位置拥有权限。由于您没有该位置的规则,Firebase将使用默认值false
。
这个问题有两种可能的解决方案。第一个是确保您从规则中指定的位置读取/写入,在本例中为firebase.database().ref('dummyOrders').child($dummyid)
。但由于您使用的是复合键,您可能只知道用户ID,我怀疑这将是适合您的解决方案。
第二种选择是使用Query-based security rules。通过此,您可以指定允许的查询。对于问题中的代码,您将获得如下所示的规则。
"rules":
"dummyOrders":
".read": "query.orderByChild == 'cid' &&
query.equalTo == auth.uid" // restrict basket access to owner of dummyOrders
"$dummyid":
".write": "auth!=null && $dummyid.contains(auth.uid)",
".read": "auth!=null && $dummyid.contains(auth.uid)"
请记住,要使基于查询的规则起作用,查询必须与规则匹配。
以上是关于我想检索用户生成的数据,但在Firebase中获取权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章