gpt4 book ai didi

swift - Firebase 规则失败 : permission_denied

转载 作者:行者123 更新时间:2023-11-30 11:28:58 26 4
gpt4 key购买 nike

在我的应用程序中,我有 vc1 推送 vc2。在 vc2 中,我从 Firebase 中提取一些数据。

问题是,当我将规则设置为以下值时,当 vc2 被推送时,我不断收到 failed:permission_denied

{
"rules": {
"sneakers": {
".read": "auth != null || auth.uid === null",
".write": "auth.uid != null"
},
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}

如果我返回到 vc1,将值更改为以下值,那么我就不会遇到任何问题并且可以访问

{
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}

但事情是这样的,一旦我将它们设置回第一个值,返回到 vc1 然后推送 vc2 我仍然可以访问数据库。如果我删除该应用程序并重新启动它,该过程会重复进行。

我想使用第一个值,因为我想保证用户节点上的数据安全。

为什么我不会用我的第一个值继续获得permission_denied,对规则进行更改,然后在将它们更改回来后,我不再获得permission_denied?我的规则哪里出了问题

VC2:

let root = Database.database().reference()

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

root?.observeSingleEvent(of: .value, with: {
(snapshot) in

// sneakers node might not exist
if snapshot.hasChild("sneakers/nike)"){
....
}
)}
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

root?.removeAllObservers()
}

数据库布局:

root
|
@-sneakers // this node might not exist
| |
| nike
|
@-users
| |
| uid
|
@-jackets...

最佳答案

您正在尝试从数据库的根目录读取数据 (root?.observeSingleEvent(...),但您只向单个用户和运动鞋节点授予访问权限。因为您正在尝试如果要阅读超出您有权访问的内容,Firebase 会拒绝您的观察者。

很难说为什么有时不会出现此错误,但很可能是缓存问题。您的新规则尚未应用(这种情况应该很少见),或者您正在从 iOS 设备的缓存中读取数据(当您仍具有访问权限时,数据就存储在该缓存中)。

无论哪种方式,您都应该确保只读取您有权访问的数据。所以:

root?.child("sneakers/nike")?.observeSingleEvent(of: .value, with: {
(snapshot) in

// sneakers node might not exist
if snapshot.exists() {
....
}
)}

关于swift - Firebase 规则失败 : permission_denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50457229/

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