这个问题之前已被问过,但其他解决方案都不适合我。
阅读下面的安全规则就可以了。
使用以下安全规则写入会导致错误。
飞镖
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'
这应该是直截了当的,但我不明白我做错了什么。
使用
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