Firebase规则query.equalTo始终返回" Permission denied"在REST上

时间:2018-01-23 23:02:33

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

我试图让我的数据库安全,我的方案数据如下:

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 个答案:

答案 0 :(得分:3)

firebaser here

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

以下原始答案

服务器解释目前使用query.orderByChildquery.equalTo的安全规则的方式存在错误。我们正在努力修复。

要解决此问题,您可以合并query.startAtquery.endAt以获得相同的结果:

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