gpt4 book ai didi

ios - Firebase 查询(在 swift 中)确定数据库中是否已存在用户名

转载 作者:行者123 更新时间:2023-11-30 12:42:13 25 4
gpt4 key购买 nike

我对 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 节点就可以正常工作。

关于ios - Firebase 查询(在 swift 中)确定数据库中是否已存在用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100243/

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