我正在使用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()
。 - BaseZendispatch_async(dispatch_get_main_queue(), { })
中,并尝试清除此时存在的所有可能的监听器,但都没有成功。似乎是内存中的某些东西破坏了它。 - Bruno Galinari