代码之家  ›  专栏  ›  技术社区  ›  Daniel Koprowski

Firebase规则查询。equalTo总是在REST上返回“权限被拒绝”

  •  8
  • Daniel Koprowski  · 技术社区  · 7 年前

    我正在尝试保护我的数据库,我的场景数据如下所示:

    receipts: [
      {
        userId: id,
        ...
      },
      {
        userId: id,
        ...
      },
    ...
    ]
    

    每张收据都有 userId 包含其创建者信息的字段。我想返回特定用户的收据列表。为此,我进行了REST调用,如下所示:

    https://[PROJ_NAME].firebaseio.com/receipts.json?orderBy="userId"&equalTo="[USER_ID]"&auth=[TOKEN]

    而且在所有的规则上,它都是非常有效的。但我想保护我的数据库,以便其他用户仅通过更改URL就无法看到所有资源。

    在firebase文档中,我发现了这样的片段:

    "baskets": {
      ".read": "auth.uid != null &&
                query.orderByChild == 'owner' &&
                query.equalTo == auth.uid" // restrict basket access to owner of basket
    }
    

    这似乎是合理的,所以我将其应用到我的配置中,但现在它总是失败。我的文件是这样的:

    {
      "rules": {
          "receipts": {
            ".indexOn": ["userId"],
            ".read": "auth.uid != null &&
                      query.orderByChild == 'userId' &&
                      query.equalTo == auth.uid"
        }
      }
    }
    

    不幸的是,它总是回来 "error" : "Permission denied" . 因为那件事,我损失了一整天:(

    有人能帮我吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Frank van Puffelen    7 年前

    这里是firebaser

    更新(2018-01-25):此错误现已修复。由于这是服务器端问题,因此无需更新SDK。

    .


    下面是原始答案


    服务器解释使用 query.orderByChild query.equalTo 目前。我们正在进行修复。

    要暂时解决此问题,可以将 query.startAt query.endAt 要获得相同的结果:

        ".read": "auth.uid != null &&
                  query.orderByChild == 'userId' &&
                  query.startAt == auth.uid &&
                  query.endAt == auth.uid"