我有一个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中。
我怎样才能做到这一点?基本上,我需要从配置了in the usual way Firebase的IOS应用程序到另一个Firebase项目中包含的另一个Firebase数据库获得读/写访问权限。
dbRef
答案 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'"