【问题标题】:Swift, Firebase. Check if a users, childs value exists斯威夫特,火力基地。检查用户,孩子的价值是否存在
【发布时间】:2016-06-20 17:27:23
【问题描述】:

在我的游戏中,你首先必须登录,然后你必须选择一个团队名称,该名称存储在我的 firebase 数据库中,在玩家 UID 下,当玩家输入他的团队名称时,我想检查是否它已经被占用了,或者播放器很好。

let rootRef = FIRDatabase.database().reference()
rootRef.queryOrderedByChild("teamName").queryEqualToValue("Bob fc").observeEventType(.Value, withBlock: { snapshot in

    if (snapshot.value is NSNull) {
        print("Name is not in use")
    } else {
        print("Name is in use")
    }   
})

我的数据树:

{
    "users" : {
        "pbXvXYOKmJQqwSQZ9IlBykG7x1P2" : {
             "teamName" : "Bob fc"
        }
    }
}

我的数据库规则:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

问题是它不打印任何东西,我在这里做错了什么?

【问题讨论】:

  • 您正在查询您的根 ref。您应该改为查询 /users 节点,
  • 我应该只做 rootRef.child("users").queryOrdere... 那么?
  • 当然。我扔了一个答案。

标签: swift firebase firebase-realtime-database


【解决方案1】:

您正在查询您的根 ref。您应该改为查询 /users 节点

let rootRef = FIRDatabase.database().reference()
let usersRef = rootRef.childByAppendingPath("users")
usersRef.queryOrderedBy....

您可以缩短它,但为了清楚起见,我使用了详细模型。

附带说明,在 Firebase 3.x 中,默认设置是只允许经过身份验证的用户进行读写。这是通过实时数据库部分中的规则完成的。

如果您想在不进行身份验证的情况下测试您的代码,请将您的规则更改为此

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

请注意:这会将您的数据开放给任何想要阅读它的人,但如果您只是学习或测试应用程序,它会更方便一些。

【讨论】:

  • 它仍然不打印任何东西-.-
  • @Benja0906 如果它不打印任何内容,则根本不会调用该块,或者您被拒绝访问。这表明您的 Firebase 引用不正确,或者您在尝试读取时更有可能未经过身份验证。在 Firebase 3.x 中,默认设置是只允许经过身份验证的用户进行读写。检查 Firebase 控制台中的规则。
  • 我认为你是对的,它似乎根本没有检查,我试图在观察者内打印一个随机字符串,但它从未被打印出来。我编辑了我的问题,并写下了我的数据库规则,也许它们有问题,我真的不知道如何正确编写规则。
  • @Benja0906 啊,是的 - 现在是你的问题。查看我更新的答案 - 您可以复制/粘贴我写的规则以临时解决问题。
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2017-04-15
  • 2015-11-26
  • 1970-01-01
  • 2014-08-02
  • 2017-07-22
  • 2017-03-24
相关资源
最近更新 更多