如何从使用firebase设置的一个IOS应用程序读取/写入另一个firebase项目中包含的另一个firebase数据库?斯威夫特3

时间:2017-07-01 23:26:42

标签: ios firebase swift3 firebase-realtime-database firebase-authentication

我有一个Firebase数据库通过GoogleService-Info.plist连接到我的IOS应用程序。在AppDelegate中,我配置了App FIRApp.configure()。我可以读/写数据。

现在,在这个IOS应用程序中,我想访问另一个FireBase数据库brevCustomer。出于某种原因,来自let dbRef的{​​{1}}在Xcode中有一个标记,表示此“不可变值viewDidLoad从未使用过”,并且应用程序在第一行崩溃,有趣的是startObserving(){{1} }。

有没有人可以展示如何进行配置,以便我可以读/写brevCustomer数据库?

修改

请考虑以下情况:

  • 我有两个IOS应用客户工作者以及两个名为 CustomerFireBase WorkerFirebase 的Firebase项目我希望他们能够以下列方式工作。

  • 客户使用电子邮件和密码注册,登录,进行预订,数据保存在CustomerFireBase中。

  • 工作人员使用电子邮件和密码注册,日志是,观察WorkerFirebase以更改值或添加子项
    • 从CustomerFireBase中读取
      • 写入CustomerFireBase
      • 写给WorkerFirebase

我怎样才能做到这一点?基本上,我需要从配置了in the usual way Firebase的IOS应用程序到另一个Firebase项目中包含的另一个Firebase数据库获得读/写访问权限。

dbRef

1 个答案:

答案 0 :(得分:2)

回答问题和评论。

如您所知,当用户向Firebase注册时,会在Firebase服务器上创建一个用户帐户,并为用户提供用户ID(uid)。

典型的设计模式是在Firebase中有一个/ users节点,用于存储有关用户的其他信息,例如昵称,地址或电话号码。

我们可以利用/ users节点来指示它是什么类型的用户;工作人员或客户端,它将与应用程序的其余部分和Firebase绑定,以便他们获得正确的数据。

例如

users
  uid_0
    nickname: "John"
    user_type: "Worker"
  uid_1
    nickname: "Paul"
    user_type: "Client"
  uid_2
    nickname: "George"
    user_type: "Worker"
  uid_3
    nickname: "Ringo"
    user_type: "Worker"

如您所见,John,George和Ringo都是工人,Paul是客户。

当用户登录时,Firebase signIn函数将返回包含uid的用户身份验证数据。

    Auth.auth().signIn(withEmail: "paul@harddaysnight.com", password: "dog",
     completion: { (auth, error) in

        if error != nil {
            let err = error?.localizedDescription
            print(err!)
        } else {
            print(auth!.uid)
            //with the uid, we now lookup their user type from the
            //users node, which tells the app if they are a client
            //or worker
        }
    })

如果应用数据按此分割

app
  client_data
     ...
  worker_data
     ...

可以设置一个简单的规则来验证用户user_type是worker_data节点的Worker和Client_data节点的Client。这是一个伪示例,允许客户端用户只访问client_data节点中的数据(概念性)

rules 
  client_data
     $user_id
        ".read": "auth != null && root.child(users)
                                      .child($user_id)
                                      .child("user_type") == 'Client'"