【发布时间】:2021-01-07 07:48:27
【问题描述】:
在Database 中,我删除了一个实际的密钥-LoGeKWGQMJ2EZ5b_Scp,它工作正常。但后来我尝试再次删除相同的确切密钥并打印成功删除。然后我添加了一个完全伪造的密钥12345,它仍然打印成功删除
guard let userId = Auth.auth().currentUser?.uid else { return }
let fakeKey = "12345"
let postsRef = Database.database().reference().child("posts").child(userId).child(fakeKey)
postsRef.removeValue { (error, _) in
if let error = error {
print(error.localizedDescription)
return
}
print("successfully deleted") // always prints
}
然后我尝试了原子删除以查看会发生什么,它为 1 个真密钥和 1 个假密钥打印 成功删除。即使在真正的密钥被删除并且我再次尝试之后,它仍然为假密钥和不存在的密钥打印成功删除:
guard let userId = Auth.auth().currentUser?.uid else { return }
let fakeKey = "12345"
let postsRef = "/posts/\(userId)/\(fakeKey)"
// this is a real key
let realKey = "-LvXTCmXfpzJA9SUBX8U"
let postsUserIdsRef = "/posts_userIds/\(userId)/\(realKey)"
var dict = [String: Any]()
dict.updateValue(NSNull(), forKey: postsRef)
dict.updateValue(NSNull(), forKey: postsUserIdsRef)
let rootRef = Database.database().reference()
rootRef.updateChildValues(dict, withCompletionBlock: { (error, _) in
if let error = error {
print(error.localizedDescription)
return
}
print("successfully deleted") // always prints
})
奇怪的是,当我尝试对存储做同样的事情时,我总是收到 does not exist 错误,这正是我所期望的
Object myUserId/-MHRkqMuc9c43MDNnbkw/-LoGeKWGQMJ2EZ5b_Scp.mp4 does not exist.
代码:
// for this example postId is a real key but the videoId is the nonexistent key from above
guard let userId = Auth.auth().currentUser?.uid else { return }
let realPostId = "-MHRkqMuc9c43MDNnbkw"
let nonexistentVideoId = "-LoGeKWGQMJ2EZ5b_Scp"
let storageRef = Storage.storage().reference().child(userId).child(realPostId).child("\(nonexistentVideoId).mp4")
storageRef.delete(completion: { (error) in
if let error = error {
print(error.localizedDescription) // prints Object myUserId/-MHRkqMuc9c43MDNnbkw/-LoGeKWGQMJ2EZ5b_Scp.mp4 does not exist.
return
}
print("successfully deleted") // never prints
})
顺便说一句,Storage 如果您成功删除了一次并尝试再次删除它,它将返回 does not exist 错误。
为什么Database 不为不存在/以前删除的密钥和/或假密钥返回错误,但Storage 确实返回错误?
【问题讨论】:
标签: ios swift firebase-realtime-database firebase-storage