【问题标题】:Getting Permission Denied for read and write读写权限被拒绝
【发布时间】:2017-06-20 06:47:35
【问题描述】:

我让我的应用程序在具有广泛开放权限的情况下进行读写,现在我将其锁定。我的应用程序不会读取或写入。尽管 Firebase 规则模拟器说我的规则对于我从成功的 firebase signInWithProvider 获得的 UID 的 Facebook 身份验证用户来说是可以的,但我得到了权限被拒绝的错误。我错过了什么?

{
  "rules": {
    "items": {
      "$uid": {
        // user must match the authenticated user
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}

这是我的数据结构:

my-firebase-app
    -items: {
        -<uid123> : [
            {label:'apple'},
            {label:'banana'}
        ]
        -<uid456> : [
            {label:'pear'},
            {label:'cherry'}
        ]
    }
  • 我在 facebook auth 之后通过 firestack.auth.signInWithProvider(provider, facebookAccessToken, '') 登录到 firebase,这为我提供了包括 uid 在内的用户对象
  • 我推送到/items/uid123 并获得一个项目ID,333
  • 我将新 ID (333) 的项目 {label:'apple'} 设置为 /items/uid123/333
  • 我通过使用 web sdk 订阅 /items/uid123 的项目集合:itemsRef.child(uid).on('value', (snapshot) =&gt; .....

我的设定电话看起来像,

const newPostRef = itemsRef.child(uid).push(); newPostRef.set(itemWithID)

set promise 因权限被拒绝错误而被拒绝。

如果我的.read.write 被简单地设置为true,那么上面所有的东西都可以正常工作,这让我认为我的语法或结构在规则定义中是不合适的。希望有一些意见。

【问题讨论】:

  • 请分享触发问题的最小代码。
  • 谢谢@FrankvanPuffelen,我已经更详细地更新了我的问题
  • 我还是不明白是哪个代码触发了这个问题。是on() 触发permission denied 吗?另请注意,我们无法查看身份验证如何在此处流动。分享一个single snippet that (when run) triggers the error,而不是你认为它如何执行的项目符号列表。如果您尝试在 jsbin 中重现问题可能会有所帮助(尽管这意味着必须在没有 firestack 的情况下重现)。
  • 谢谢,这是本机反应,所以它不能在 jsbin 中工作。我正在使用 react-native-firestack 进行身份验证,它成功了——我取回了我的用户对象并包含一个 uid 字段,其值是我用来代替上面的 uid456 的值。我将firestack web sdk用于其他方法。我的 on 不会抛出错误,只是不会触发。我的set 调用(在上面添加)确实会触发错误——同样,只有当我的规则没有完全开放并设置为true 时。它似乎不太可能是我的 JS,因为它可以在没有 db 规则约束的情况下工作?相对于 db 结构,我的规则 def 看起来是否正确?

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

安全规则没有问题,理论上集合和查询操作看起来都很好。

然而,在实践中,你犯了一个严重的错误。正如您在 cmets 中所揭示的,您正在尝试同时使用 Web SDK 和 react-native-firestack 库!

两者之间不共享身份验证状态,因此on('value') 查询是完全未经身份验证的。如果您将第三个参数添加到on(取消回调),您将看到权限被拒绝错误。

你必须彻底消除Web SDK,并通过firestack使用实时数据库。

【讨论】:

  • 就是这样,现在一切正常,我将每个 Firebase 操作迁移到了 Firestack。谢谢!
猜你喜欢
  • 2016-08-27
  • 2021-11-05
  • 2016-11-15
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
相关资源
最近更新 更多