获取权限被拒绝读写

时间:2017-02-03 01:00:06

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

我让我的应用程序使用具有开放权限的读写操作,现在我将其锁定。我的应用程序不会读或写。尽管Firebase规则模拟器说我的规则适用于我认证的用户,我的规则适用于我从成功的firebase signInWithProvider获得的UID,但我获得了权限被拒绝的错误。我错过了什么?

{
  "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之后签署了firebase,firestack.auth.signInWithProvider(provider, facebookAccessToken, ''),这给了我的用户对象,包括uid
  • 我推送到/items/uid123并获取商品ID 333
  • 我在{label:'apple'}
  • 为新ID(333)设置了项目/items/uid123/333
  • 我通过网络sdk订阅/items/uid123项目集合:itemsRef.child(uid).on('value', (snapshot) => .....

我的固定电话看起来像,

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

set承诺因拒绝权限而被拒绝。

如果我的.read.write只是设置为true,那么上述所有内容都可以正常工作,这会让我认为我的语法或结构只是在规则def中。会喜欢一些意见。

1 个答案:

答案 0 :(得分:1)

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

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

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

您必须完全消除Web SDK,并通过firestack使用实时数据库。