Swift: Firebase读取权限被拒绝

4

我正在使用Swift构建一个应用程序,其中包含在用户登录之前应读取的数据。

为了防止数据被从我的应用程序外部读取,我制定了基本的安全规则:

".read": "auth != null"

为了防止未登录时读取数据,我在调用时添加了一个加载视图控制器:
func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

    let ref = Firebase(url: "<my firebase url>")

    ref.observeAuthEventWithBlock({ authData in
        if authData != nil {
            segueToListViewController()
        }
    })
    return true
}

但是当我达到这个点时,有时firebase会给我"permission denied"错误,有时则不会。
我确定已经登录了用户,因为我记录了所有的东西:
- 登录状态改变 - 用户通过facebook登录:AuthData - 应用程序已成为活动状态 - 已加载ListViewController - 正在加载数据 - 错误:Error Domain=com.firebase Code=1 "Permission Denied"
那么为什么Firebase有时会拒绝读取已登录用户的内容呢?

当该块运行时,您在哪个线程上?您可以设置断点或使用NSThread.isMainThread() - BaseZen
我尝试过那个方法,尝试将块调用包装在dispatch_async(dispatch_get_main_queue(), { })中,并尝试清除此时存在的所有可能的监听器,但都没有成功。似乎是内存中的某些东西破坏了它。 - Bruno Galinari
1个回答

2
我来晚了,但如果你把`.read`规则放到子节点名称下面一级,可能会有所帮助。
例如:
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid", 
        ".write": "auth != null && auth.uid == $uid"
      }
    },
    "child": {
        ".read": "auth != null",
        ".write": "auth != null", 
      "$child": {
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接