Swift,Firebase。检查用户是否存在childs值

时间:2016-06-20 17:27:23

标签: swift firebase firebase-realtime-database

在我的游戏中你首先必须登录,然后你必须选择一个团队名称,它存储在我的火力库数据库中,在玩家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"
      }
    }
  }
}

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

1 个答案:

答案 0 :(得分:3)

您正在查询根参考。您应该查询/ users节点

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

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

作为旁注,使用Firebase 3.x时,默认情况下仅允许经过身份验证的用户进行读写操作。这是通过实时数据库部分中的规则完成的。

如果您想在未经过身份验证的情况下测试代码,请将规则更改为

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

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