我想让用户在我的应用上编辑他们的文章。如果它们的uid与存储中文件夹的名称匹配,则可以编辑它们的帖子。
这里是我的防火墙存储的安全规则:

它说如果我想要(users/gafspL9sdVSOXVkxYNlqzxyDbvG2/listingPhotos/lXOxKS1N8dFefzai5H2B/R158bed9819e4fccf7e18a5eeeaf79c6b.png),我可以删除这个图像
然后,当我尝试编辑清单::

我得到了403个错误。它未授权的用户,实际上它会将此错误抛给GET函数,甚至连删除部分也不会。
正如您在上面看到的,我目前已登录,并且我的uid是正确的。
错误:( mydomainname?prefix=users%2FgafspL9sdVSOXVkxYNlqzxyDbvG2%2FlistingPhotos%2FlXOxKS1N8dFefzai5H2B%2F&delimiter=%2F xhrio_network.ts:70获取403号)
,这是我要访问的文件夹:

我的文件夹设置: mybucket/users/{userUID}/listingPhotos/{listingID}/picture.jpg
伙计们,有什么问题吗?我可能有错误的代码行,但模拟显示没有问题,所以我有点困惑。
谢谢!
编辑
当用户想要编辑他们的列表时,我更新存储在防火墙中的列表细节,然后删除存储在firebase存储文件夹中的所有照片,然后上传新的一批照片。
下面是我更新列表细节和删除现有照片的地方:
function editListingData() {
setLoading("loading");
db.collection("listings")
.doc(listingID)
.set(
{
title: title,
category: category,
condition: condition,
description: description,
price: price,
sellingFormat: sellingDetails,
shippingPrice: shippingPrice,
listingPhotos: [],
},
{ merge: true }
)
.then(() => {
const storageRef = firebase
.storage()
.ref()
.child(
`users/` +
auth.currentUser.uid +
`/listingPhotos/` +
listingID +
`/`
);
storageRef.listAll().then((listResults) => {
const promises = listResults.items.map((item) => {
console.log("deleting item: ", item.name)
return item.delete();
})
Promise.all(promises).then(
onUploadSubmission()
).catch((error => console.log("error deleteing files", error)));
});
})
.then(() => {
setLoading("complete");
setTimeout(() => {
history.push("/l/" + listingID)
}, 2000);
})
.catch((error) => {
console.log("firebase error: " + error);
setLoading("error");
});
}下面是我上传新照片的地方,然后将它们的下载new放到消防局文档中,这样以后我就可以轻松地获取它们了:
function onUploadSubmission() {
if (photos != []) {
const promises = [];
var listingREF = db.collection("listings").doc(listingID);
photos.forEach((photo, index) => {
if (photo.fileType.includes('image')) {
console.log("current photo to upload: ", photo, "index: ", index)
const uploadTask = firebase
.storage()
.ref()
.child(
`users/` +
auth.currentUser.uid +
`/listingPhotos/` +
listingID +
`/${"photo" + index}`
)
.put(photo.file);
promises.push(uploadTask);
uploadTask.on(
firebase.storage.TaskEvent.STATE_CHANGED,
(snapshot) => {
const progress =
(snapshot.bytesTransferred / snapshot.totalBytes) * 100;
if (snapshot.state === firebase.storage.TaskState.RUNNING) {
console.log(`Progress: ${progress}%`);
}
},
(error) => console.log(error.code),
async () => {
const downloadURL = await uploadTask.snapshot.ref.getDownloadURL();
listingREF.update({
listingPhotos: firebase.firestore.FieldValue.arrayUnion(
{
url: downloadURL,
index: index
}
),
});
}
);
}
});
Promise.all(promises)
.then(() => setCreatedListing(false))
.catch((err) => console.log(err.code));
} else {
}
}编辑2
所以我想要实现的是:
用户可以编辑自己的照片(列出照片和个人资料图片)
要做到这一点,将:
photo/s.
。
用于存储的安全规则是:
发布于 2021-04-20 18:07:02
在get()方法上收到的错误是由于该位置的规则缺乏在该目录中读取的任何权限所致。规则从上到下级联,虽然上面有一个读取,但这只适用于指定的路径users/{userUID}。
一旦解决了这个问题,我们就可以继续进一步调试了。
https://stackoverflow.com/questions/67179390
复制相似问题