Swift:Firebase 读取权限被拒绝

Posted

技术标签:

【中文标题】Swift:Firebase 读取权限被拒绝【英文标题】:Swift: Firebase read permission denied 【发布时间】:2015-07-30 22:48:39 【问题描述】:

所以我正在快速构建这个应用程序,其中包含在用户登录之前应该读取的数据。

为了防止它被从我的应用程序中读取,我提出了基本的安全规则:

".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会给我“权限被拒绝”错误,有时它不会。

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

登录已更改 用户登录 AuthData facebook: applicationDidBecomeActive 已加载 ListViewController 加载数据 错误:错误 Domain=com.firebase Code=1 "Permission Denied"

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

【问题讨论】:

该块运行时您在哪个线程上?您可以设置断点或使用NSThread.isMainThread() 我试过了,尝试将块调用包装在`dispatch_async(dispatch_get_main_queue(), )`中,并尝试清除当时存在的所有可能的侦听器,但没有成功。似乎记忆中的某些东西正在破坏它。 【参考方案1】:

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

例如


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

【讨论】:

以上是关于Swift:Firebase 读取权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

批量用户订阅 Firebase 中的主题时出现权限被拒绝错误

当observeSingleEvent时Swift Firebase规则权限被拒绝

Firebase 权限被拒绝(读取和写入)与身份验证

Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'

Firebase 权限被拒绝

Firebase 权限被拒绝错误