Vue Firebase Storage 删除图像方法出现用户无权访问错误

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

这是我的删除方法:

 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/.*')
    }
  }
}

更新 如果我取消规则中的所有限制,它就会删除。所以我想这是一个规则?

vue.js google-cloud-firestore firebase-storage
2个回答
0
投票

以下是对我有用的规则。

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;
    }
  }
}

0
投票

您必须更改安全策略以允许用户删除自己的文件才能解决此问题。

您也可以尝试下面的代码:

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 安全规则 - 最佳实践和高级用例

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