javascript - 即使分配了读取规则,Firebase 也会阻止数据获取

标签 javascript firebase firebase-realtime-database google-cloud-functions firebase-security

我正在尝试使用 firebase 在前端获取数据。以下是我的规则如何应用于实时数据库:

{
    "rules": {
        "users": {
            ".indexOn": "username",
            "$userId": {
                ".indexOn": "username",
                ".read": "$userId==auth.uid",
                ".write": "$userId==auth.uid",
                "favorites": {
                    ".indexOn": "thumb"
                }
            }
        },
        "files": {
            ".indexOn": ["uploadId", "uploadedBy", "fileURL"],
            "$fileId": {
                ".write": "newData.child('uploadedBy').val() == auth.uid",
                ".read": "data.child('uploadedBy').val() == auth.uid",
                ".indexOn": "fileURL"
            }
        },
        "uploads": {
            "$id": {
                ".write": "newData.child('createdBy').val() == auth.uid || data.child('assignedModeratorId').val() == auth.uid",
                ".read": "data.child('createdBy').val() == auth.uid || data.child('assignedModeratorId').val() == auth.uid"
            },
            ".indexOn": ["createdBy", "status", "assignedModeratorId"]
        }
    }
}

这是一个上传文档的样子:

enter image description here

我正在使用这个功能:

const snapshot = await firebase.database().ref('uploads').orderByChild('createdBy').equalTo(uid).limitToLast(1000).once('value');

但我在前端不断收到Error:permission_denied at/uploads:Client does not have access the required data.错误。当我在云功能中使用 admin 时,它工作正常。我设定的规则有什么问题吗?

最佳答案

您的代码尝试从 /uploads 读取数据,但您的规则未授予任何人从该节点读取数据的权限 - 因此它拒绝读取。

如果您想允许用户阅读他们创建的上传内容,您的规则应该 validate that query像这样的东西:

"uploads": {
  ".read": "auth.uid !== null &&
            query.orderByChild === 'createdBy' &&
            query.equalTo === auth.uid"}

关于javascript - 即使分配了读取规则,Firebase 也会阻止数据获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75409459/

相关文章:

javascript - 如何修复 Chrome 开发者窗口中的 “pending” 状态?

javascript - 停止提交表单

javascript - 源代码不显示

javascript - d3.js - 属性 d : Expected number

javascript - 如何同步从firebase存储中检索

android - 无法解析 : com. firebase :firebase-client-android:2. 3.1

javascript - 如何检查 Firebase 中的数据搜索是否成功

Firebase 上的 JavaScript : something wrong in once ("value"). then();

android - Firebase Analytics 未显示 iOS 应用的用户参与度

android - 图片网址不会被推送到 Firebase 数据库