如何在 Firebase 安全规则中访问自定义元数据以进行存储

我遇到了找不到信息的问题。似乎没有多少人在 firebase 中使用自定义元数据,我找不到关于它的明确文档。

所以,基本上,我正在做的是给我正在上传的文件提供一个新的自定义元数据,我称之为 GroupID,在 firebase 安全规则中,我正在检查这个 GroupID 是否等于我的路径中的某些内容文件。这是我的规则:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    // Get/Set a challenge in storage
    match /Groups/{GroupID}/Challenges/{ChallengeType}/{PlayerID}/{File} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.uid == PlayerID
                   && request.resource.size < 25 * 1024 * 1024
                   && request.resource.metadata['GroupID'] == GroupID;
    }
  }
}

我能够确保问题来自最后一个条件。我使用所有这些变体:

request.resource.metadata['GroupID'] == GroupID;
request.resource.metadata["GroupID"] == GroupID;
request.resource.metadata.GroupID == GroupID;
resource.metadata['GroupID'] == GroupID;
resource.metadata["GroupID"] == GroupID;
resource.metadata.GroupID == GroupID;

此外,我能够知道 GroupID 是一个字符串,而所有元数据 ['GroupID'] 及其变体都不是字符串。所以问题可能来自这里。 但是,当我统一创建元数据时,它们被创建为字符串。

最后一件事,使用 Firebase 安全规则模拟器有效。

对于元数据,您可能需要我的统一代码:

MetadataChange fileMetadata = new MetadataChange()
            {
                CustomMetadata = new Dictionary<string,string>
                {
                    { "GroupID",group_ID },}
            };

我是不是在 C# 或 Firebase 安全规则中做错了什么?

预先感谢您的帮助!

阿德里安

编辑 1:我忘记了,但是当我不检查元数据时,我可以将文件放在 firebase 存储中,元数据在这里:

如何在 Firebase 安全规则中访问自定义元数据以进行存储

k12play 回答:如何在 Firebase 安全规则中访问自定义元数据以进行存储

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/5858.html

大家都在问