【问题标题】:Swift Firebase query by child of child孩子的孩子的Swift Firebase查询
【发布时间】:2016-11-11 22:29:17
【问题描述】:

这是问题的副本:Querying in Firebase by child of child

有两个相同的答案,但它们都不起作用。我会简单地回答答案,但我没有这样做的声誉 - 所以我需要问另一个问题(stackOverflow失败 - 我可以用倍数淹没网站,但我不能告诉别人他们的答案不起作用!?!)

我正在开发一个使用组的 Firebase 应用。每个组的结构都是这样的

    groups : {
  "-KW5C5pS_OsWqS8_SLDy" : {
    "key" : "-KW5C5pS_OsWqS8_SLDy",
    "name" : "Test",
    "users" : {
      "uFpUrVFafVgVFsQudTNpOquIJZE2" : true
    }
  }
}

我希望能够查询具有当前用户 uid 的组,用真或假表示他们是否具有管理员权限。现在我的查询看起来像这样:

FIRDatabase.database().reference()
        .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable)

这与作为另一个问题的答案发布的内容相同,并反复声明它有效 - 但是它什么也没返回!

这是一个错误还是我做错了什么?

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    我认为你的查询是对的,你忘记了观察者:

        FIRDatabase.database().reference()
        .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable).observe(FIRDataEventType.value, with: { (snapshot) in
     // Do what you need with your snapshot here
     // check if the snapshot is different from nil
    })
    

    【讨论】:

    • 我将其传递给 FUIArray - 它为我进行观察。使用单个孩子时我没有问题,例如:查询:FIRDatabase.database().reference().child("groupdata").child(group.key).child("items").queryOrdered(byChild:" parentlist").queryEqual(toValue: list.key) - 只有在使用 "users/" + uid 时我才会遇到问题
    • 我也尝试将字符串更改为等效的“users/(uid)” - 结果相同。
    【解决方案2】:

    好的 - 我发现了我的问题。我设置了一个规则,只允许我读取我所属的那些组 - 但是显然这对于​​当前的 Firebase 规则语言是不可能的,因为您需要能够读取整个目录才能查询它。我更改了规则以允许所有经过身份验证的用户读取所有组并解决了这个问题 - 尽管它不是理想的安全性。

    我花了很长时间才弄清楚这一点,因为它没有在日志中给我一个权限被拒绝错误 - 它只是给了我一个空查询。

    【讨论】:

    • 如果要处理代码中的权限被拒绝错误,可以使用observe 方法的withCancelBlock 变体。无论如何,这对于未来的查询可能是个好主意。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2018-04-28
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多