gpt4 book ai didi

javascript - query.startAt 数据库规则权限被拒绝

转载 作者:行者123 更新时间:2023-11-30 13:45:26 26 4
gpt4 key购买 nike

好像 query.startAt 规则被破坏了,或者我不明白。有人可以确认吗?这是最小的可重现错误。 Live example ;使用 CTRL+SHIFT+i 打开 Chrome 控制台。 GitHub repo .

数据库.rules.json:

{
"rules":{
".read": "query.startAt>0",
".write": false
}
}

index.html

<!DOCTYPE html>
<html>
<body>
<script src="/__/firebase/7.6.1/firebase-app.js"></script>
<script src="/__/firebase/7.6.1/firebase-database.js"></script>
<script src="/__/firebase/init.js"></script>
<script>
function init(){
firebase.database.enableLogging(true);
const db=firebase.database();
const qry=db.ref("/").orderByChild('time').startAt(3);
//logging shows permission denied on next line
qry.once('value',s=>console.log("snapshot",s.val()));
}

init();
</script>
</body>
</html>

数据库内容:

database contents

Chrome 浏览器控制台输出显示权限被拒绝:

...snip...
@firebase/database: p:0: Listen on / for {"i":"time","sp":3}
@firebase/database: p:0: {"r":2,"a":"q","b":{"p":"/","q":{"sp":3,"i":"time"},"t":1,"h":""}}
...snip...
@firebase/database: p:0: from server: {"r":2,"b":{"s":"permission_denied","d":"Permission denied"}}
@firebase/database: p:0: listen response {"s":"permission_denied","d":"Permission denied"}
@firebase/database: event: /:cancel

如果 database.rules.json 改为:

{
"rules":{
".read": true,
".write": false
}
}

监听的权限拒绝从浏览器控制台消失:

...snip...
@firebase/database: p:0: Listen on / for {"i":"time","sp":3}
@firebase/database: p:0: {"r":2,"a":"q","b":{"p":"/","q":{"sp":3,"i":"time"},"t":1,"h":""}}
...snip...
@firebase/database: p:0: handleServerMessage d {"p":"","d":{"msg1":{"time":11}}}
@firebase/database: event: /:value:{"msg1":{"time":11}}
01:45:21.044 (index):13 snapshot {"msg1":{"time":11}}
@firebase/database: p:0: from server: {"r":2,"b":{"s":"ok","d":{"w":["no_index"]}}}
...snip...

这是从一个更大的应用程序中缩减而来的,在该应用程序中它显示为已登录的用户。

最佳答案

这里是 firebaser

我可以重现这个问题,据我所知,你的规则看起来不错。

在我的测试中,当使用 query.startAt == 3 时,规则正确地允许读取,但是使用 >>=规则拒绝读取操作。

你能file a bug report看看这是否是规则模块中的错误,或者我们是否都遗漏了有关您的规则的某些内容?


更新:问题似乎来自对规则引擎中类型的误解。例如,当您确保所有数字都是 float 时,它会起作用:

".read": "query.startAt > 0.5",

和:

ref.orderByChild("time").startAt(2.5);

请注意,这只是故障排除的一部分,并不是解决方案,尽管它可能会让您暂时解决问题。

关于javascript - query.startAt 数据库规则权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com