2017-02-03 33 views
1

我得到我的应用程序与读取和写入与广泛开放的权限,现在我锁定它。我的应用程序不会读取或写入。尽管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的身份验证后,firestack.auth.signInWithProvider(provider, facebookAccessToken, ''),这给了我,包括UID
  • 我推到/items/uid123和我的用户对象获取物品ID,333
  • 我在处为新ID(333)设置了/items/uid123/333
  • 我订阅项目的集合在/items/uid123通过网络SDK这样做:itemsRef.child(uid).on('value', (snapshot) => .....

我的组呼的样子,

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

set承诺得到许可否认拒绝错误。

上述所有做工精细的东西,如果我的.read.write被简单地设置true这使我想起我的语法或结构是DEF规则毗邻。会喜欢一些输入。

+0

请分享触发问题的最小代码。 –

+0

谢谢@FrankvanPuffelen,我已更新我的问题,更详细 –

+0

我仍然不明白哪个代码触发了问题。它是''on()'触发'permission denied'吗?另请注意,我们无法看到身份验证如何在此流动。您可以分享[单个代码段(运行时)触发错误](http://stackoverflow.com/help/mcve),而不是您想如何执行的项目符号列表。如果您尝试在jsbin中重现问题可能会有所帮助(但这意味着必须在没有堆叠的情况下进行重现)。 –

回答

1

安全规则没有错,理论上集和查询操作都很好。

但实际上,你犯了严重的错误。正如您在评论中显示的那样,您正试图同时使用Web SDK和react-native-firest库!

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

您必须彻底清除Web SDK,并通过堆叠使用实时数据库。

+0

就是这样,现在所有的工作都将我的每一个Firebase动作都移植到了堆叠中。谢谢! –