【发布时间】: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) => .....
我的设定电话看起来像,
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