这是我的删除方法:
async deleteAvatar(path) {
console.log({ path });
try {
const imageRef = ref(storage, path);
console.log({ imageRef });
await deleteObject(imageRef);
} catch (error) {
console.log('File Delete Error');
console.error(error);
}
},
这是我的控制台日志:
路径: “/uploads/0QohgxJLyEdavJYQGziqHD9oqxJ2/profileImgs/1692216191041-Default-img.png”
这是我的安全规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /uploads/{userId}/profileImgs/{imageName}{
allow read;
allow write: if request.auth.uid == userId && request.resource.contentType.matches('image/.*')
}
}
}
更新 如果我取消规则中的所有限制,它就会删除。所以我想这是一个规则?
以下是对我有用的规则。
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /uploads/{userId}/profileImgs/{imageName}{
allow read;
allow create: if request.auth.uid == userId && request.resource.contentType.matches('image/.*');
allow update: if request.auth.uid == userId && request.resource.contentType.matches('image/.*');
allow delete: if request.auth.uid == userId && request.auth != null;
}
}
}
您必须更改安全策略以允许用户删除自己的文件才能解决此问题。
您也可以尝试下面的代码:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /uploads/{userId}/profileImgs/{imageName}{
allow read;
allow write: if request.auth.uid == userId && request.resource.contentType.matches('image/.*');
allow delete: if request.auth.uid == userId;
}
}
}
只要用户的 UID 与路径中的 userId 匹配,用户就可以通过此更新删除自己的文件。执行此操作后,执行删除操作时应该不再遇到
"user does not have permission to access"
问题。
不要忘记彻底测试修订后的安全规则,以确保它们满足应用程序的安全需求,同时仍然启用所需的操作。
您可以查看此文档以了解 Firebase 安全规则 - 最佳实践和高级用例。