Firebase 存储权限一直被拒绝

问题描述 投票:0回答:1

我的 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."
  }
}

我认为应该是存储规则错误,因为当存储规则仅涉及日期时,此代码可以工作,但即使规则没有规定,它也不起作用。问题是我无法理解这条规则有什么问题。 我想让存储仅在用户登录时才可访问。

python firebase firebase-storage firebase-security
1个回答
0
投票

您的安全规则将对象路径与以下模式相匹配:

/用户/{userId}/{allPaths=**}

但是您的代码根本没有在前缀中使用

/user
,因此该规则不允许发生写入。

您应该更改代码以匹配规则,或更改规则以匹配您的代码。 如果您更改了代码,它可能如下所示:

self.storage.child('/user/' + self.uid + '/'+fNameonServer+'.png')
© www.soinside.com 2019 - 2024. All rights reserved.