rest - Firebase 规则 query.equalTo 在 REST 上总是返回 "Permission denied"

标签 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" .我因为那件事失去了一整天:(

有人可以帮我吗?

最佳答案

火力士在这里

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

.

原答案如下

服务器解释使用 query.orderByChild 的安全规则的方式存在错误。和 query.equalTo在这一刻。我们正在努力修复。

要暂时解决此问题,您可以结合使用 query.startAtquery.endAt得到相同的结果:

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

关于rest - Firebase 规则 query.equalTo 在 REST 上总是返回 "Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412285/

相关文章:

ruby-on-rails - 什么是理解 RESTful 及其含义的简明方式?

javascript - Angular - 将 Jackson 输出转换为 JSON

java - Spring 安全 Java 配置。规则不适用

node.js - Cloud Firestore node.js 使用类型 "object"作为 Firestore 参数无效

swift - 我需要多个 Firebase 数据库引用吗?

ios - 确保在 Firebase (Swift) 中创建新用户时的唯一用户名

java - 自动更新类内的共享首选项

java - Tomcat 7 和 Jersey RESTful Web 服务的多请求

swift - 当我们在 IOS 中注册时,为什么数据没有存储在 Firebase 数据库中...?

ios - 在 childByAutoId Firebase Swift 中访问特定数据