gpt4 book ai didi

Firebase 存储安全规则错误 - 用户没有权限

转载 作者:行者123 更新时间:2023-12-01 13:42:52 25 4
gpt4 key购买 nike

我正在使用自定义 token 向 firebase 进行身份验证。我只想限制当前用户有权写入和删除图像,并授予所有人读取权限。

下面的代码是我的swift代码中与存储相关的一部分

let filePath = REF_STORAGE.child("/"+(FIRAuth.auth()?.currentUser?.uid)!+"/profilepic.jpeg")
let metaData = FIRStorageMetadata()
metaData.contentType = "image/jpeg"

而我目前的firebase存储规则如下图所示

service firebase.storage {
match /b/test-123456789.appspot.com/o {
match /{uid}/{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth.uid == uid;
}
}
}

当我尝试上传图片时出现以下错误

用户无权访问 gs://test-123456789.appspot.com/MYAUTHUID/profilepic.jpeg。

但是如果我将存储规则更改为低于存储规则,我就可以上传图像并且个人资料图片存储在/gs://test-123456789.appspot.com/123456789/profilepic.jpeg 下

service firebase.storage {
match /b/test-123456789.appspot.com/o {
match /{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
}
}

请告诉我如何解决此问题。

最佳答案

您的 {uid} 是否包含任何特殊字符? (例如“+”号)

注意:Firebase Support 回复我说这个问题正在调查中,根据我 3 天前发送给他们的错误报告:我发现在 Firebase 存储中调用 {userid} 对我不起作用如果它包含“+”号,则规则。

我使用 E.164 格式的电话号码(例如:"+97234567899")。我尝试了几次运行测试,它们清楚地表明从 {uid} 返回的值存在问题:

  1. request.auth != null; - 有效
  2. request.auth.uid != null; - 有效
  3. request.auth.uid == "+97234567899"; - 有效
  4. request.auth.uid == uid; - 没用

不过,我找到了绕过这个问题的方法。这是我想出的:


解决方案

resource.name.split('/')[position]

由于 {uid} 代表一个文件夹名称,您可以通过使用 resource.name 操作文件的完整路径字符串来提取它的值,用 ('/') 拆分它,然后选择相关层次结构。

例如:如果这是您的路径:/Images/Profiles/{uid}/profile.jpg,那么像这样提取 uid:resource.name.split('/')[2]

在您的代码示例中,我会这样做:

service firebase.storage {
match /b/test-123456789.appspot.com/o {
match /{uid}/{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth.uid == resource.name.split('/')[0];
}
}
}

编辑(2017 年 7 月 28 日)

Firebase 支持团队在一个月前回复了我的报告,问题已经确定并正在处理中。

但是,与此同时,如果您希望通过电话号码进行身份验证(就像我所做的那样)- 我们不应该再使用自定义 token ,因为 Firebase 现在支持此类身份验证。

关于Firebase 存储安全规则错误 - 用户没有权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38474646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com