gpt4 book ai didi

firebase - 为什么我无法更改 Firebase 引用的优先级(权限被拒绝)

转载 作者:行者123 更新时间:2023-12-02 18:21:07 24 4
gpt4 key购买 nike

在我的Firebase ,我有一个看起来像这样的对象:

person
---- name
---- age

当我第一次尝试创建它时,我使用以下命令:

firebaseRef.child("person").setValue(...)

效果很好。

有时我想优先创建这个条目,可以这样做:

firebaseRef.child("person").setValue(..., myPriority)

这也很好用。

但是,优先级应该稍后更新。我尝试了以下方法:

firebaseRef.child("person").setPriority(myPriority)

不幸的是,此操作失败并显示错误消息“权限被拒绝”。这是为什么?

该引用的安全规则如下:

"person": {
".read": true,
".write": true,
"name": { ".validate": "newData.isString()" }
"age": { ".validate": "newData.isNumber()" }
"$other": { ".validate": false }
}

可以看出,该节点是可读可写的。

最佳答案

问题:

“权限被拒绝”错误的原因显然是在安全规则中。

问题在于优先级存储在“隐藏”属性 .priority 中,该属性在文档中很少提及。

该属性不会显示在 Firebase Forge(仪表板)中,但在导出原始 JSON 时可以看到。

现在指令 "$other": { ".validate": false } 会阻止除 nameage 之外的任何属性已验证。因此会出现“权限被拒绝”错误。

但是,我不知道为什么在使用setValue(..., myPriority)时可以首先写入该对象。这也应该会导致错误。

(半途)解决方案:

现在,向安全规则添加新指令似乎是显而易见的,如下所示:

".priority": { ".validate": true }

但这行不通。 Firebase Forge 响应如下:

Key names can't contain ".", "#", "$", "/", "[", or "]" (unbound names start with "$")

这意味着我们无法妥善解决这个问题。我们必须调整现有的安全规则,但有一些缺点:当我们想要更新优先级时,必须删除规则 "$other": { ".validate": false } ,这给我们留下了不完美的结果。验证。

关于firebase - 为什么我无法更改 Firebase 引用的优先级(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293083/

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