我有一个这样的数据库
users/UID1/“用户名”(用户 1)
/UID2/"Username" (of user 2)
/UID3/"Username" (of user 3)
/UID4/"Username" (of user 4)
等等..
我想检查用户名是否存在,但我无法与所有现有的 UID 进行循环。
现在我已经尝试过:
let databaseRef = Database.database().reference()
databaseRef.child("users").child("uid").child("Username").observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
switch snapshot.value {
case let value as Bool where value:
// value was a Bool and equal to true
print ("username found")
default:
// value was either null, false or could not be cast
print ("username not found")
}
})
}
我不知道该用什么代替 child("uid") 来循环进入数据库中的每个 uid 并检查用户名是否存在
感谢您的帮助 !
实现此目的的最简单方法是在注册用户时,使用其唯一的 UID 创建用户,并将其所有数据保存在其中,就像您所做的那样,但还要创建一个名为“用户名”的节点,该节点仅保存所有已注册的用户名键作为用户名,值为 1,如下所示:
Usernames {
- username: 1
}
当用户注册然后输入用户名时,您可以检查它是否存在,如下所示:
let username = "username that user has typed in"
let reference = Database.database().reference()
reference.child("usernames").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(username) {
print("Already exists")
} else {
print("Doesn't exist")
}
}, withCancel: nil)
EDIT:
感谢@FrankvanPuffelen,这是一种更有效的方法 - 无需循环遍历每个用户名。
let reference = Database.database().reference()
reference.child("usernames").child(username).observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
print("Username already exists")
} else {
print("Username doesn't already exist")
}
}, withCancel: nil)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)