[英]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.