【发布时间】:2022-01-21 08:46:26
【问题描述】:
我希望我的用户只能读取和写入他自己的数据,但是。当我测试规则时,我收到消息“模拟器读取被拒绝”。请告诉我哪里错了?感谢您的宝贵时间。
这里有一些信息:
规则
service firebase.storage {
// Only a user can upload their file, but anyone can view it
match /users/{userId}/{fileName} {
allow read ;
allow write: if request.auth != null && request.auth.uid == userId;
}
}
位置
/b/online-notepad-d43d2.appspot.com/o/WkqtgpdUYRUGOBaAfmCByXtVPoT2/file1.txt
提供者
“密码”
FIREBASE UID
WkqtgpdUYRUGOBaAfmCByXtVPoT2
电子邮件
hgaur701@gmail.com
电子邮件已验证
是的
身份验证负载
{
"uid": "WkqtgpdUYRUGOBaAfmCByXtVPoT2",
"token": {
"sub": "WkqtgpdUYRUGOBaAfmCByXtVPoT2",
"aud": "online-notepad-d43d2",
"email": "hgaur701@gmail.com",
"email_verified": true,
"firebase": {
"sign_in_provider": "password"
}
}
}
屏幕截图
我正在使用的确切位置:“/WkqtgpdUYRUGOBaAfmCByXtVPoT2/file1.txt” 还有一件事我从上传按钮上传了这个文件夹和文件。 不是来自 POST 请求。
仍然得到相同的结果:(
【问题讨论】:
-
您可以编辑您的示例以显示您正在阅读的整个路径吗?使用短 UID 通常最适合此操作。
-
@FrankvanPuffelen 请检查此编辑。我正在使用的确切位置:“/WkqtgpdUYRUGOBaAfmCByXtVPoT2/file1.txt”还有一件事我从上传按钮上传了这个文件夹和文件。不是来自 POST 请求。这是用户 UID WkqtgpdUYRUGOBaAfmCByXtVPoT2。
-
您访问的不是
/users/$uid,而是未声明访问权限的/$uid。请参阅下面对我的答案的编辑以获得更长的解释。 -
虽然您在新测试中可能仍然没有权限,但原始屏幕截图中的错误是您访问的路径您没有声明任何访问权限。 --- 我不确定在新情况下出了什么问题。
-
下载 URL 为拥有该 URL 的任何人提供公共访问权限。它们不需要身份验证,这也意味着如果您想通过安全规则保护读取访问权限,则不应使用下载 URL。
标签: firebase-authentication firebase-storage firebase-security