使用swift检查Firebase中的usertype

时间:2016-04-28 21:39:46

标签: ios swift authentication firebase

这里有swift和Firebase的初学者!我有一个类似这样的数据库:

数据库
玩家
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下面有更多的孩子,我没有包含在我的图表中,包含每个玩家/教练的信息。以下是我用于初步构建的auth方法。

if ref.authData != nil  {

     print("There is already a user signed in!")
     self.performSegueWithIdentifier("playerLogin", sender: self)

 } else {
     // No user is signed in
 }


谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

tobeisdev有一个很好的答案(我会接受),链接的答案也会有效。

我想补充一个替代方案;因为教练和玩家都是用户,为什么不选择标准的Firebase /用户设计模式

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,以及知道该球员或教练所属的球队。你也可以找一个团队,知道教练和球员是谁。

只是一个想法。

答案 1 :(得分:0)

对于您的第一个问题,我可以与您分享一些搜索和检查这些父节点中任何ref-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