使用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 

这将使您查询具体的教练或玩家,并获得他们的使用情况以及知道哪个球员或教练是其中的一员。你也可以得到一个球队并且知道教练和球员是谁。

只是一个想法。

+0

这真棒,这个结构对于我将在这个数据库中进行的其他一些事情会更好。谢谢Jay!在你提到的关于数据库的最后一个问题中,“越平坦越好”;我开始明白这是如何派上用场的。 –

关于第一个问题,我可以与你进行搜索,并在这些父节点检查任何裁判的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

+0

Aaah好的这些查询开始有意义。来自Parse(R.I.P)的Firebase查询结构对我来说是一件新事物。 你能解释一下你的解决方案的最后一块吗?对我来说,它看起来像检查用户的UID是否存在于玩家中,如果它确实执行玩家登录,并且如果不执行教练登录而没有检查相同UID的“教练”。我对吗? –

+0

@JoeSloan'如果snapshot.value是NSNull {'和'如果snapshot.value为? String == nil {“同样的事情,如果它在这些块中,你可以检查另一个节点来提供你的UID是否存在。但它不是在玩家 - 就像你说的那样。 – tobeiosdev