我想检索用户生成的数据,但在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中获取权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 到 Kotlin 片段

获取firebase android中特定值的推送ID

我如何从颤动的firebase实时数据库中检索数据

如何从孩子的 Firebase 获取数据?

如何从 Firebase 实时数据库中检索值?

如何从 Firebase 获取 PWA 数据