我让我的应用程序使用具有开放权限的读写操作,现在我将其锁定。我的应用程序不会读或写。尽管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'}
]
}
firestack.auth.signInWithProvider(provider, facebookAccessToken, '')
,这给了我的用户对象,包括uid /items/uid123
并获取商品ID 333
{label:'apple'}
/items/uid123/333
/items/uid123
项目集合:itemsRef.child(uid).on('value', (snapshot) => .....
我的固定电话看起来像,
const newPostRef = itemsRef.child(uid).push();
newPostRef.set(itemWithID)
set
承诺因拒绝权限而被拒绝。
如果我的.read
和.write
只是设置为true
,那么上述所有内容都可以正常工作,这会让我认为我的语法或结构只是在规则def中。会喜欢一些意见。
答案 0 :(得分:1)
安全规则没有任何问题,理论上,集合和查询操作都很好。
然而,在实践中,你犯了一个严重的错误。正如您在评论中所揭示的那样,您正在尝试同时使用Web SDK和react-native-firestack库!两者之间不共享身份验证状态,因此on('value')
查询完全未经身份验证。如果您将第三个参数添加到on
(取消回调),您会看到权限被拒绝错误。
您必须完全消除Web SDK,并通过firestack使用实时数据库。