【发布时间】:2021-09-12 15:18:48
【问题描述】:
我试过这个打字稿代码????
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import serviceAccount from "/Users/300041370/Downloads/serviceKey.json";
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
const buckObj = functions.storage.bucket("myBucket").object();
export const onWikiWrite = buckObj.onFinalize(async (object) => {
const filePath = object.name ?? "test.json";
const bucket = admin.storage().bucket("myBucket");
bucket.file(filePath).download().then((data) => {
const contents = data[0];
data = {"key": "value"};
const doc = admin.firestore().collection("myCollection").doc();
doc.set(data);
});
});
但这给了我以下错误
"status":{"code":7,"message":"权限不足,无法(重新)配置触发器(存储桶 myBucket 的权限被拒绝)。请授予存储桶编辑者角色的所有者权限并尝试再次。
我曾问过这个question here,但它作为this question 的副本被关闭了。它基本上说,storage.bucket("myBucket") 功能不受支持,我将不得不改用match 来将此操作限制在此特定存储桶/文件夹中的文件。因此,我尝试了这个????
const buckObj = functions.storage.object();
export const onWikiWrite = buckObj.onFinalize(async (object) => {
if (object.name.match(/myBucket\//)) {
const fileBucket = object.bucket;
const filePath = object.name;
const bucket = admin.storage().bucket(fileBucket);
bucket.file(filePath).download().then((data) => {
const contents = data[0];
const doc = admin.firestore().collection("myCollection").doc();
const data = {content: contents}
doc.set(data);
});
}
});
我仍然面临同样的问题。我会在这里重复一遍:
"status":{"code":7,"message":"权限不足,无法(重新)配置触发器(存储桶 myBucket 的权限被拒绝)。请授予存储桶编辑者角色的所有者权限并尝试再次。
【问题讨论】:
-
通常情况下,由于 Firebase SDK for Cloud Functions 的 1.0 版
firebase-admin应初始化为 without any parameters within the Cloud Functions runtime。 -
最亲爱的@RenaudTarnec,我什至无法想象,这就是问题所在。基本上,在由于其他问题而发生这种情况之前,我将此参数添加到管理员调用中。然后较早的问题得到解决,这个管理参数可能已经开始给出同样的问题。无论如何,谢谢????
-
很高兴我能帮助你@kamalbanga。请参阅我的回复,其中指出了 Cloud Functions 生命周期管理的一个重要方面:当所有异步处理完成时,您需要返回一个 JavaScript 承诺。
-
是的,看着它。
标签: firebase google-cloud-functions google-cloud-storage firebase-storage