Мне трудно разобраться во всей токеновой части загрузок Firebase.
Я хочу просто загрузить использование аватаров, сохранить их в базе данных и затем прочитать их на стороне клиента.
const storageRef = firebase.storage().ref();
storageRef.child(`images/user-avatars/${user.uid}`).put(imageObj);
Затем в своей облачной функции я получаю новый URL-адрес следующим образом:
exports.writeFileToDatabase = functions.storage.object().onFinalize(object => {
const bucket = defaultStorage.bucket();
const path = object.name as string;
const file = bucket.file(path);
return file
.getSignedUrl({
action: "read",
expires: "03-17-2100"
})
.then(results => {
const url = results[0];
const silcedPath = path.split("/");
return db
.collection("venues")
.doc(silcedPath[1])
.set({ images: FieldValue.arrayUnion(url) }, { merge: true });
});
});
Я включил IAM
в платформе API Google и добавил Cloud functions service agent
в App Engine default service account
.
Я чувствую, что точно такая же конфигурация работала раньше, но теперь она иногда даже не пишет новый URL, или я получаю 403, пытаясь прочитать ее. Я не могу найти какие-либо объяснения или ошибки в том, что я делаю неправильно.
РЕДАКТИРОВАТЬ: Забыл добавить этот кусок кода, но FieldValue
установлен в верхней части документа как
const FieldValue = admin.firestore.FieldValue;
РЕДАКТИРОВАТЬ: Это точная ошибка, которую я получаю Failed to load resource: the server responded with a status of 403 ()
И я только что понял, когда пытался использовать эту ссылку, которая была автоматически сгенерирована вышеуказанной функцией, в качестве источника для компонента изображения:
https://storage.googleapis.com/frothin-weirdos.appspot.com/images/user_avatars/yElCIVY4bAY5g5LnoOBhqN6mDNv2?GoogleAccessId=frothin-weirdos%40appspot.gserviceaccount.com&Expires=1742169600&Signature=qSqPuuY4c5xmdnpvfZh39Pw3Vyu2B%2FbGMD1rQwHDBUZTAnKwP11MaOFQt%2BTV53krkIgvJgQT0Xl3UUxkngmW9785fUri75SSPoBk0z4DKyZnEBLxgTGRE8MzmXadQ%2BHDJ3rSI8IkkoomdnANpLsPN9oySshZ1h4BfOBvAmK0hQ4Gge1glH7qhxFjVWfX3tovZoL8e2smhuCRXxDsZtJh0ihbIeZUEnX8lGic%2B9IT6y4OskS2ZlrZNjvM10hcEesoPdHsT4oCvfhCNbUcJcueRKfsWlDCd9m6qmf42WVOc7UI0nE0oEvysMutWY971GVRKTLwIXRnTLSNOr6fSvJE3Q%3D%3D