swift ,火力基地。检查用户, child 的值(value)是否存在

标签 swift firebase firebase-realtime-database

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

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

最佳答案

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

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

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

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

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

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

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

关于 swift ,火力基地。检查用户, child 的值(value)是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928418/

相关文章:

android - Firebase 用户为已注册用户返回空元数据

ios - 如何检查用户之前是否注册过(Firebase Auth)?

firebase-realtime-database - Firebase 实时数据库的这些默认安全规则是什么意思?

swift - 没有覆盖的 UIPopoverPresentationController

iOS11 如何处理放置在自定义 View 中的自定义文件

javascript - componentDidMount 中的状态始终为 null,应该有来自任务变量的数据

ios - 使用新的 firebase 登录后不会加载用户信息。 iOS

javascript - 将对象推送到 firebase 的智能方法

swift - 核心数据和表格 View

swift - UITableView : automatically set height for the row and fix it with max height constant