使用swift检查Firebase中的usertype
初学者可以在swift和Firebase中查看!我有一个看起来像这样一个数据库:
使用swift检查Firebase中的usertype
数据库
球员
ref.authdata.uid换球员-1
ref.authdata.uid换球员-2
ref.authdata.uid换球员-3
教练
ref.authdata.uid换教练1
ref.authdata.uid换教练-2
ref.authdata.uid换教练-3我的应用程序的
一半是专为球员,一个教练。 如何检查ref.authData.uid孩子是否在玩家或教练孩子之下?我的数据结构错误吗?
另外,每个uid在它下面都有更多的孩子,我没有在我的图表中包含关于每个玩家/教练的信息。以下是我用于初步构建的身份验证方法。
if ref.authData != nil {
print("There is already a user signed in!")
self.performSegueWithIdentifier("playerLogin", sender: self)
} else {
// No user is signed in
}
感谢您的帮助!
tobeisdev有一个很好的答案(我会接受它)和相关的答案也可以。
我想添加一个替代方案;因为教练和球员都是用户为什么不与标准火力地堡/用户设计模式去
users
user_id_0
type: "player"
name: "Larry"
team: "team_id_0"
user_id_1
type: "player"
name: "Biff"
team: "team_id_0"
user_id_2
type: "coach"
name: "Benny"
team: "team_id_0"
,那么你可以添加一个团队节点
teams
team_id_0
team_name: "nerds r' us"
coach: user_id_2
players:
user_id_0: true
user_id_1: true
这将使您查询具体的教练或玩家,并获得他们的使用情况以及知道哪个球员或教练是其中的一员。你也可以得到一个球队并且知道教练和球员是谁。
只是一个想法。
关于第一个问题,我可以与你进行搜索,并在这些父节点检查任何裁判的uid,你可以使用这段代码行的某些方面分享:
let REF_BASE = Firebase(url: "https://yourapp.firebaseio.com")
REF_BASE.childByAppendingPath("players").observeEventType(.Value, withBlock: { snapshot in
for snap in snapshot.children {
let key = snap.key as String
if key == "ref.authdata.uid-for-player-2" {
print(snap.value as String) // to see its value
}
}
})
REF_BASE.childByAppendingPath("players").childByAppendingPath("ref.authdata.uid-for-player-2").observeSingleEventOfType(.Value, withBlock: { snapshot in
if snapshot.value as? String == nil {
print("in usage")
}
else {
print("free")
}
})
欲了解更多详细看Jay's answer here 。
Aaah好的这些查询开始有意义。来自Parse(R.I.P)的Firebase查询结构对我来说是一件新事物。 你能解释一下你的解决方案的最后一块吗?对我来说,它看起来像检查用户的UID是否存在于玩家中,如果它确实执行玩家登录,并且如果不执行教练登录而没有检查相同UID的“教练”。我对吗? –
@JoeSloan'如果snapshot.value是NSNull {'和'如果snapshot.value为? String == nil {“同样的事情,如果它在这些块中,你可以检查另一个节点来提供你的UID是否存在。但它不是在玩家 - 就像你说的那样。 – tobeiosdev
这真棒,这个结构对于我将在这个数据库中进行的其他一些事情会更好。谢谢Jay!在你提到的关于数据库的最后一个问题中,“越平坦越好”;我开始明白这是如何派上用场的。 –