swift - 自动从 Firebase 数据库中删除数据
问题描述
我看到了一些其他问题,但我无法让它发挥作用。我有一个用 swift 编码的 Mac 应用程序,它有一个 Firebase 登录,但用户键入了一个存储在 Firebase 上的密钥,当用户成功使用它时,有没有办法自动删除该密钥?
这是我的数据库。
这是当前使用的代码。
import Cocoa
import FirebaseAuth
import FirebaseDatabase
class LoginViewController: NSViewController {
@IBOutlet weak var textUsername: NSTextField!
@IBOutlet weak var textPassword: NSSecureTextFieldCell!
@IBOutlet weak var btnLogin: NSButton!
var keyArray = \[Int64\]()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear() {
}
func getLoginState() -> Bool{
let state = UserDefaults.standard.bool(forKey: "isRegistered")
if (state) {
return true
} else {
return false
}
}
override func viewDidAppear() {
let state = self.getLoginState()
if (state){
self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "loginsegue"), sender: nil)
self.view.window?.close()
}
var ref: DatabaseReference!
ref = Database.database().reference()
let keyRef = ref.child("key1")
keyRef.observe(DataEventType.childAdded, with: { (snapshot) in
// let postDict = snapshot.value as? \[String : AnyObject\] ?? \[:\]
let keyStr = snapshot.value as? Int64
if let actualPost = keyStr{
self.keyArray.append(actualPost)
}
})
}
@IBAction override func dismissViewController(_ viewController: NSViewController) {
dismiss(self)
}
@IBAction func close(sender: AnyObject) {
self.view.window?.close()
}
@IBAction func onSignup(_ sender: Any) {
// self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "gotosignup"), sender: sender)
// self.view.window?.close()
}
func dialogOK(question: String, text: String) -> Void {
let alert: NSAlert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = NSAlert.Style.warning
alert.addButton(withTitle: "OK")
alert.runModal()
}
@IBAction func onLogin(_ sender: Any) {
//self.btnLogin.isEnabled = false
var isKey = false
if (!self.textUsername.stringValue.isEmpty) {
for key in keyArray{
if(Int64(self.textUsername.stringValue)! == key)
{
UserDefaults.standard.set(true, forKey:"isRegistered")
self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "loginsegue"), sender: nil)
self.view.window?.close()
isKey = true
}
}
if (!isKey){
self.dialogOK(question: "Error", text: "Invalid Key")
}
} else {
self.dialogOK(question: "Error", text: "Please Input Key")
}
}
}
解决方案
即使有任何代码,您也不能像那样对数据库进行排序并期望有一个工作代码。它会产生一个混乱的代码:
你需要:
- 对您的数据库进行排序,如 [1220:0]。首先是关键。0 & 1 作为是否使用的指标。
- 用户点击
onLogin()
后,您需要将使用的键值设置为 1- 设置 Cloud Functions 以检查 used key 是否等于 1,如果是。然后取出钥匙。
做剩下的工作。
帮助您入门的相关文章:
推荐阅读
- reactjs - 使用调度时,结果在反应中打印两次
- xcode - 即使 Firestore 连接(读/写)到我的数据库,它也没有在 xcode 中使用
- node.js - 完成第一个命令后节点执行 bash 命令
- arrays - 字符串数组 C
- sql-server - SQL如何只大写一个单词
- string - 是否存在具有不同空间复杂度的多种 KMP 算法方法?有什么区别?
- dafny - 如何在 Dafny 中证明通用引入
- python - 使用python将左侧的一列和右侧的剩余列合并到一个数据框中
- hyperledger-fabric - 由于某些 MSP 不匹配,Peer 无法加入频道
- postgresql - SQL联合对我来说似乎失败了