【问题标题】:firebase function fails with error gserviceaccount.com:signBlob failed, reason: Client network socket discfirebase 函数失败并出现错误 gserviceaccount.com:signBlob failed, reason: Client network socket disc
【发布时间】:2021-05-03 15:00:18
【问题描述】:

我正在尝试创建一个 Firebase 云功能,该功能可以获取长期有效的图像的下载 url。我抛出错误的代码如下:

const admin = require('firebase-admin');
admin.initializeApp();

await admin.storage().bucket('gs://myproject.appspot.com').file(filePath).getSignedUrl({
          action: 'read',
          expires: '03-09-2491'
        })

我的 firebase-admin 服务帐户似乎没有创建访问密钥的权限。我不知道如何授予它?因为当我使用 json 文件生成凭据时,此代码在我的本地机器上工作。

任何有关如何解决此问题的指示将不胜感激?

谢谢, 马尼什

【问题讨论】:

    标签: firebase google-cloud-functions firebase-storage


    【解决方案1】:

    检查分配给您的 App Engine 默认服务帐户的角色 ==> [projectID]@appspot.gserviceaccount.com

    默认包含project/editor的角色,你需要将角色Cloud Functions Service Agent添加到服务账户,这个角色包括生成签名URLiam.serviceAccounts.signBlob所需的权限

    请检查您存储桶中服务帐户的权限/角色,project/editor 就足够了,但如果您使用其他帐户,则需要分配角色Legacy Bucket Reader

    这是一个示例代码,您可以根据自己的用例进行调整

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp()
    
    exports.gensigned = functions.https.onRequest(async (req, res) => {
        var filePath="myfile.html"
    
        var url = await admin.storage().bucket('gs://myproject').file(filePath).getSignedUrl({
              action: 'read',
              expires: '03-09-2491'
            })
    
        console.log(url)
    
    
        res.json({ "url": url});
        });
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      相关资源
      最近更新 更多