[英]Firebase query (in swift) to determine if username already exists in database
我对Firebase和iOS的经验很少,想知道是否可以在Swift中创建查询以在Firebase的JSON结构中查找特定数据。
用户在应用程序中创建帐户时,系统会提示他选择用户名。 当用户在同一屏幕上按下“继续”按钮时,我想实时查询数据库以确定用户选择的用户名是否已经存在。
我在网络上阅读了很多文章,但找不到任何可以实现目标的东西。 到目前为止,我编写了下面的代码,该代码不起作用,但是我无法查明问题的根源(请注意,username.text是用户输入所需用户名并进行验证的文本字段):
FIRDatabase
.database()
.reference()
.child("username")
.queryOrderedByValue()
.queryEqual(toValue: self.username.text!)
.observeSingleEvent(of: .value, with: {(snap) in
if snap.exists(){
// Username unavailable, choose another one
} else {
// Username available, OK to keep this username
}
})
数据库结构如下:
{
"users" : {
USER_1_UID : {
"account" : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName",
"last name" : "myLastName",
"username" : "my.username"
}
}
USER_2_UID : {
"account" : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName2",
"last name" : "myLastName2",
"username" : "my.username2"
}
}
}
}
我愿意更改数据库结构以添加“用户名”注释,如下所示,该注释将包含所有注册的用户名(如果可以简化查询的话):
{
"users" : {
USER_1_UID : {
"account" : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName",
"last name" : "myLastName",
"username" : "my.username"
}
}
USER_2_UID : {
"account" : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName2",
"last name" : "myLastName2",
"username" : "my.username2"
}
}
}
"listOfUsernames" : {
USER_1_UID : "my.username"
USER_2_UID : "my.username2"
}
}
欢迎您提供任何帮助。 谢谢!
您的代码非常接近。 三个变化:
Remove queryOrderedByValue
然后,您将用户信息埋得太深了
USER_1_UID : {
"account" : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName",
"last name" : "myLastName",
"username" : "my.username"
}
}
更改为(删除不需要的帐户节点名称)
USER_1_UID : {
"email" : "test@stackoverflow.com",
"first name" : "myFirstName",
"last name" : "myLastName",
"username" : "my.username"
}
然后您需要告诉Firebase您正在查询哪个节点
所以改为
let usersRef = rootRef.child("users")
let queryRef = usersRef.queryOrdered(byChild: "username")
.queryEqual(toValue: "some user name")
queryRef.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot) //you need snapshot, or snap or some other var name
})
最后,您不需要listOfUsernames节点,您的users节点也可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.