我的 firebase 存储规则现在设置如下:
rules_version = '2';
// Craft rules based on data in your Firestore database
// allow write: if firestore.get(
// /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
service firebase.storage {
match /b/{bucket}/o {
match /user/{userId}/{allPaths=**} {
allow read,write: if request.auth.uid == userId;
}
}
}
我上传图像的Python代码是:
self.storage.child(self.uid + '/'+fNameonServer+'.png').put(self.path_here + '/dummy.png')
这是我看到的错误消息。
File "C:\Users\bboyc\PycharmProjects\turtle\.venv\turtle_main.py", line 1140, in uploadImage
self.storage.child(self.uid + '/'+fNameonServer+'.png').put(self.path_here + '/dummy.png')
File "C:\Users\bboyc\PycharmProjects\turtle\.venv\lib\site-packages\pyrebaselite\pyrebaselite.py", line 464, in put
raise_detailed_error(request_object)
File "C:\Users\bboyc\PycharmProjects\turtle\.venv\lib\site-packages\pyrebaselite\pyrebaselite.py", line 511, in raise_detailed_error
raise HTTPError(e, request_object.text)
requests.exceptions.HTTPError: [Errno 403 Client Error: Forbidden for url: https://firebasestorage.googleapis.com/v0/b/jost-19f5e.appspot.com/o?name=lKIp1f9k05RmwP6CRWo6qT2Bcir1/imgJustice.png] {
"error": {
"code": 403,
"message": "Permission denied."
}
}
我认为应该是存储规则错误,因为当存储规则仅涉及日期时,此代码可以工作,但即使规则没有规定,它也不起作用。问题是我无法理解这条规则有什么问题。 我想让存储仅在用户登录时才可访问。
您的安全规则将对象路径与以下模式相匹配:
/用户/{userId}/{allPaths=**}
但是您的代码根本没有在前缀中使用
/user
,因此该规则不允许发生写入。
您应该更改代码以匹配规则,或更改规则以匹配您的代码。 如果您更改了代码,它可能如下所示:
self.storage.child('/user/' + self.uid + '/'+fNameonServer+'.png')