我需要获取“bucket/loads/:loadID”路径中所有文件的网址。 我能够在名为“文件”的数组中获取这些文件。 然后我过滤它(我得到 endFiles 数组)。 现在我只需要一个名为 url 的新数组来推送 (getSignedUrl) 中的所有 url。 但我不知道该怎么做。 我需要在循 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试使用file.getSignedUrl()通过 Google Cloud Functions (Nodejs) 从 Firebase Storage 获取下载 URL。 我在 Cloud Functions 控制台中收到此错误:
{ SigningError: A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified. Permission iam.serviceAccounts.signBlob is required to perform this operation on service account projects/myapp-cd94d/serviceAccounts/myapp-cd94d@appspot.gserviceaccount.com.
at SigningError (/user_code/node_modules/@google-cloud/storage/build/src/file.js:58:9)
at authClient.sign.then.catch.err (/user_code/node_modules/@google-cloud/storage/build/src/file.js:1019:22)
at process._tickDomainCallback (internal/process/next_tick.js:135:7) name: 'SigningError' }
我从将Firebase Admin SDK 添加到您的服务器文档中复制了代码。 我的functions
文件夹中有我的serviceAccountKey.json
。 firebase deploy
没有给我错误
Error parsing triggers: Cannot find module 'serviceAccountKey.json'
所以我必须有正确的路径到我的serviceAccountKey.json
。 我什至生成了一个新的私钥,但没有解决问题。 我有firebase-admin 6.1.0
和firebase-tools 6.1.0
。 这是我的代码的相关部分:
const admin = require('firebase-admin');
var serviceAccount = require("./myapp-cd94d-firebase-adminsdk-1234x-sEcReT.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://myapp-cd94d.firebaseio.com"
});
...
const config = {
action: 'read',
expires: '03-17-2025'
};
file.getSignedUrl(config).then(function(data) {
const url = data[0];
console.log(url);
})
.catch(function(error) {
console.error(error);
})
我看到Doug Stevenson 的答案有不同的代码,但它似乎等同于文档中的代码。
答案与Cloud Identity and Access Management 有关。 首先,转到您的 Google Cloud Platform IAM 和管理页面。 您会看到各种服务帐户。 查找类似于myapp-cd99d@appspot.gserviceaccount.com
的服务帐户。 它应该在Name
列中显示App Engine default service account
。 (如果错误消息引用了不同的服务帐户,请查找该服务帐户。)
在Role
列中,您可能会或不会看到某些角色。 如果您收到SigningError
消息,则Role
列缺少角色Service Account Token Creator 。 选中myapp-cd99d@appspot.gserviceaccount.com
左侧的myapp-cd99d@appspot.gserviceaccount.com
以选择服务帐户,然后单击右侧的铅笔进行编辑。 在下一个屏幕中,单击+ADD ANOTHER ROLE
。 向下滚动到Service Accounts
,选择Service Account Token Creator
,然后保存。 现在,您应该会在App Engine default service account
的Roles
列中看到Service Account Token Creator
。 现在您有权创建签名令牌。
接下来,重复这些步骤并为Storage Object Creator
添加角色。 这将允许您运行getSignedURL()
。
您可以交替保存分配服务帐户管理员和存储管理员,它们分别包括Service Account Token Creator
和Storage Object Creator
角色,以及其他角色。
现在,如果您收到的是SingingError
消息,那可能是因为您对布鲁斯·斯普林斯汀 (Bruce Springsteen) 的“Glory Days”曲调SingingError
。 :-)
就我而言,我启用了身份和访问管理 (IAM),网址如下:
https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project= “您的项目名称”
您可以在这里找到所有文档,为什么找不到您的管理模块https://nextjs.org/docs/messages/module-not-found
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.