当前位置: 首页 > 知识库问答 >
问题:

Firebase函数管理sdk获取云存储对象的下载url:权限被拒绝

锺超英
2023-03-14
exports.test = functions.https.onRequest(async (req, res) => {
  const file = await admin
    .storage()
    .bucket("XXX")
    .file("YYY");
  await file.makePublic();
  const url = await file.publicUrl();
});

我目前在云存储上设置了图像。因为我需要通过Google Cloud Node.js客户端库来访问这些代码,所以上面的代码是我当前的设置。不幸的是,在运行此代码时,我得到以下错误:

{
  "error": {
    "code": 401,
    "message": "Anonymous caller does not have storage.objects.getIamPolicy access to the Google Cloud Storage object.",
    "errors": [
      {
        "message": "Anonymous caller does not have storage.objects.getIamPolicy access to the Google Cloud Storage object.",
        "domain": "global",
        "reason": "required",
        "locationType": "header",
        "location": "Authorization"
      }
    ]
  }
}

如何初始化管理SDK:

const serviceAccount = require("./[my-project-name]-8a2aa8e3eedc.json");
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o/images {
    match /listings/{listingId}/{photo} {
      allow read, write: if true;
    }
    match /users/{userId}/{photo} {
      allow read: if true;
      allow write: if request.auth.uid == userId;
    }
  }
}

共有1个答案

空英逸
2023-03-14

虽然Firebase Admin SDK不受存储规则的约束,但附加到运行代码的函数的服务帐户仍然需要具有IAM存储权限,但这些是单独的事情。确保函数的服务帐户具有“存储对象管理”IAM角色。

另一方面,在试图重现该问题时,我发现file.publicurl()方法当前不起作用,因此需要使用getSignedurl方法,顺便说一句,出于安全考虑,这是推荐的方法。或者(尽管非常不鼓励),您可以自己手工创建uri。

 类似资料:
  • 我正在上传。mp3文件通过Firebase存储,但我遇到了权限/规则问题。每次上传时,我都会收到控制台警告 “FIREBASE警告:更新/失败:权限被拒绝” 和 "firebase.js:478未捕获(promise中)错误:PERMISSION_DENIED:拒绝许可" 尽管有这些错误,我还是在Firebase存储中找到了该文件。然而,这些错误使我的代码无法顺利运行。我发现更改Firebase数

  • 我正在为Python使用Firebase Admin SDK。据我所知,在云控制台的IAM部分,admin SDK具有编辑器和存储对象管理角色。有什么方法可以通过Python将上传的对象公之于众? 在docs:Python GCS API中还没有找到其他有用的东西 谢了。 代码示例

  • 我要上传一张图片到firebase的存储器。我用的不是网页版存储(不应该用)。我正在使用firebase admin。没问题,我毫无困难地上传了文件,并在变量“file”中得到结果。 如果我访问firebase存储控制台,图像就在那里。好吧 现在,我有一些问题。 > < li> 为什么对< code>upload ()方法的响应有这么多信息和这么多对象?回顾这个巨大的对象,我在元数据中发现了一个名

  • 问题内容: 我对编码比较陌生,遇到了麻烦。 我有这段代码可以将数据发送到Firebase 但是,我不断收到错误: FIREBASE警告:设置为/ users /(GoogleID)失败:Permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…) 当我尝试查找时,它谈论的是