Swift Firebase查询

时间:2017-09-24 04:00:19

标签: swift firebase firebase-realtime-database

我正试图在他的电子邮件中抓住这个uid。

我有这个:

let usersRef = Database.database().reference().child("users")

    usersRef.queryOrdered(byChild: "email").queryStarting(atValue: email).queryEnding(atValue: email).observeSingleEvent(of: .value, with: { (snapshot) in
        if let values = snapshot.value as? [String: Any]{
            print(values)
        }
    })

我的数据库如下所示:

用户

| - $ UID

| --email:"一些电子邮件"

快照不会返回任何内容。

此外,调试器告诉我:

  

使用未指定的索引。您的数据将在客户端上下载和过滤。考虑添加" .indexOn":"电子邮件" at / users to your security rules以获得更好的性能

我想我是这样做的:

{
  "rules": {
"users": {
  ".read": "auth != null",
  "$uid": {
    ".write": "$uid === auth.uid",
    ".indexOn": ["email"]
  }

但这也不起作用。

2 个答案:

答案 0 :(得分:1)

您必须在执行查询的位置定义Firebase数据库索引。所以这比你现在拥有的水平高一级:

{
  "rules": {
    "users": {
      ".indexOn": ["email"],
      ".read": "auth != null",
      "$uid": {
        ".write": "$uid === auth.uid",
      }
    }
  }
}

答案 1 :(得分:0)

如下更改:

{
    "rules": {
    "users": {
        ".read": "auth != null",
        "$uid": {
        ".write": "$uid === auth.uid",
        ".indexOn": "email"
    }
    }
}