【问题标题】:Swift: Firebase read permission deniedSwift:Firebase 读取权限被拒绝
【发布时间】: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(), {})`中,并尝试清除当时存在的所有可能的侦听器,但没有成功。似乎记忆中的某些东西正在破坏它。

标签: ios swift firebase


【解决方案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": {
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2016-08-27
    • 2016-12-18
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多