Firebase 存储安全规则检查自定义元数据

问题描述 投票:0回答:1

这个问题之前已被问过,但其他解决方案都不适合我。

阅读下面的安全规则就可以了。

使用以下安全规则写入会导致错误。

飞镖

SettableMetadata meta =
    SettableMetadata(
        customMetadata: {
        'selfUid': '123', // <-- HARD CODED FOR TESTING
        'partnerUid': partnerUid,
});

print(meta.customMetadata);

// {selfUid: 123, partnerUid: XXXXXX}

print(ref.fullPath);

// messages/afd6947a-3fe1-4fbd-9a45-e16ab55c6a8d

await ref.putData(Uint8List.fromList(medium), meta);

规则

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {

    match /messages/{messageUid}/{allPaths=**} {
      allow write: if request.auth.uid != null &&
       request.resource.metadata.selfUid == '123'; <-- HARD CODED FOR TESTING

      allow read: if request.auth.uid != null
        && (request.auth.uid == resource.metadata.selfUid
        || request.auth.uid == resource.metadata.partnerUid )
    }
  }
}

错误

firebase_storage
unauthorized
User is not authorized to perform the desired action.

问题

如果我从安全规则中删除此内容,我会将文件写入存储:

request.resource.metadata.selfUid == '123'

这应该是直截了当的,但我不明白我做错了什么。

flutter firebase-storage firebase-security
1个回答
0
投票

使用

putData()
通过 Flutter Web 设置元数据失败。

调用

updateMetadata()
后使用
putData()
更新元数据有效。

SettableMetadata meta =
    SettableMetadata(
        customMetadata: {
        'selfUid': '123', // <-- HARD CODED FOR TESTING
        'partnerUid': partnerUid,
});

print(meta.customMetadata);

// {selfUid: 123, partnerUid: XXXXXX}

print(ref.fullPath);

// messages/afd6947a-3fe1-4fbd-9a45-e16ab55c6a8d

await ref.putData(Uint8List.fromList(medium), meta);

await ref.updateMetadata(meta); // <------------ ADD THIS ONE

© www.soinside.com 2019 - 2024. All rights reserved.