Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:Firebase读取权限被拒绝_Ios_Swift_Firebase - Fatal编程技术网

Ios Swift:Firebase读取权限被拒绝

Ios Swift:Firebase读取权限被拒绝,ios,swift,firebase,Ios,Swift,Firebase,所以我在swift中构建了这个应用程序,在用户登录之前应该读取数据 为了防止从我的应用程序中读取,我设置了基本安全规则: ".read": "auth != null" 为了防止登录前读取,我在调用时设置了加载视图控制器: func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { let

所以我在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
}
func应用程序(应用程序:UIApplication,willFinishLaunchingWithOptions启动选项:[NSObject:AnyObject]?)->Bool{
let ref=Firebase(url:)
ref.observeAuthEventWithBlock({authData in
如果authData!=nil{
segueToListViewController()
}
})
返回真值
}
但当我达到这种程度时,firebase有时会给我“拒绝许可”错误,有时则不会

我肯定有一个已登录的用户,因为我正在记录所有内容:

  • 登录名已更改
  • 登录AuthData facebook的用户:
  • applicationIDecomeactive
  • 加载的ListViewController
  • 加载数据
  • 错误:错误域=com.firebase代码=1“权限被拒绝”

那么为什么Firebase有时会在用户登录时拒绝阅读呢?

我参加这个聚会已经很晚了,但是如果你把.read规则放高一级,直接放在孩子的名字下面,可能会有所帮助

比如说

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid", 
        ".write": "auth != null && auth.uid == $uid"
      }
    },
    "child": {
        ".read": "auth != null",
        ".write": "auth != null", 
      "$child": {
      }
    }
  }
}

当那个块运行时,你在哪个线程上?您可以设置断点或使用
NSThread.isMainThread()
我尝试了这一点,尝试在'dispatch\u async(dispatch\u get\u main\u queue(),{}')中包装块调用,并尝试清除该点存在的所有可能侦听器,但没有成功。好像是记忆中的什么东西毁了它。