【问题标题】:com.google.firebase.storage.StorageException: User does not have permission to access this objectcom.google.firebase.storage.StorageException:用户无权访问此对象
【发布时间】:2020-01-30 18:27:57
【问题描述】:

我在尝试 delete() Firebase 存储中的图像时收到以下错误:

com.google.firebase.storage.StorageException: User does not have permission to access this object.

我的规则如下所示:

service firebase.storage {
  match /b/{bucket}/o {
    match /users/{userId}/{filename} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.uid != null;
    }
  }
}

我的存储参考树如下所示:

users > {uid} > {filename}

这是函数调用:

private fun deleteImages(firebaseUser: FirebaseUser){
    val firebaseUser = FirebaseAuth.getInstance().currentUser ?: return false
    /** Delete user image from storage */
    val bucket = "http://myapp.appspot.com.storage.googleapis.com/"
    val filename = "Lx0NkP2iTzLnlFupvRq"
    Log.d(TAG, "$bucket/users/${firebaseUser.uid}/$filename")
    // successfully prints filename url: http://myapp.appspot.com.storage.googleapis.com/users/QX2Qi49j3URbK5FtmWvQT1jWHcw2/Lx0NkP2iTzLnlFupvRq
    bucket.child(bucket + "users/${firebaseUser.uid}/$filename").delete().addOnSuccessListener { Log.d(TAG, "First image deleted") }.addOnFailureListener { exception -> Log.d(TAG, "Failed to delete images: $exception") }

}

知道问题出在哪里吗?

【问题讨论】:

  • 请编辑问题以显示无法按您期望的方式工作的代码。请清楚正在构建的引用的确切值,以便我们检查您的代码是否符合您的规则。还要确保用户已登录。
  • 您是否使用 Firebase 身份验证登录?
  • 允许读、写;控制台中未授予的权限可能是
  • @DougStevenson 我已经添加了函数调用,其中显示了试图删除的正确文件名(包括 UID) - 但它因用户权限异常而失败。

标签: android firebase firebase-storage firebase-security


【解决方案1】:

解决了。问题是,我将桶前缀http://myapp.appspot.com.storage.googleapis.com/ 添加到bucket.child() - 但bucket.child() 已经包含桶前缀并且只需要子路径(users/${firebaseUser.uid}/$filename")。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2020-08-09
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2018-09-21
    相关资源
    最近更新 更多