在Firebase中,我实施了一条规则,限制对当前登录用户的节点的访问。节点如下所示:
{
"app": {
"my_team": {
"a_really_long_uid_string": {
"Lionel_Messi" = true,
"Christiano_Ronaldo" = true
}
}
}
}
我已经创建了以下规则(基于在线Firebase文档),这意味着登录用户只能看到自己的数据(即没有其他用户的数据)。
{
"rules": {
"my_team": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
我的客户端环境是在Swift中,我已经做了一个简单的测试程序,
func testAuthentication() {
print("test: \(uid)")
FirebaseRef.child("my_team").observe(.value, with: { (snapshot) in
let snapshot = snapshot.value as! [String: AnyObject]
print("test2: \(snapshot)")
}) { (error) in
print(error.localizedDescription)
}
}
当我运行代码时,我在控制台中获得第一个打印("测试:a_really_long_uid_string")但是没有得到第二个打印语句。
如果我更改规则以限制对任何已登录用户的访问,我会在XCode控制台中获取两个打印语句。
{
"rules": {
"my_team": {
"$uid": {
".read": "auth != null",
".write": "auth != null"
}
}
}
}
有谁知道该怎么做或我如何解决这个问题?我想知道服务器上的auth.uid或$ uid是否为零,这可能是访问被拒绝的原因。