簡體   English   中英

Firebase-有效地檢查用戶名

[英]Firebase - Check efficiently username taken

我開發了一個小功能,用於檢查通過注冊來賓輸入的用戶名是否可用。 盡管如此,該函數還是使用迭代和條件檢查在設備上進行本地檢查。 我認為,當該列表中有成千上萬的用戶時,這可能會成為將來的性能瓶頸(每次成功創建新用戶時,列表都會更新)。 有沒有辦法可以在后端方面更有效地執行此操作?

這是現在可以使用的功能:

func checkUsernameTaken(completion: (result: NSError) -> Void)
    {
        let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)

        dbReference.child("usernamesTaken").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in
            if(snapshot != nil )
            {
                for rest in snapshot.children.allObjects as! [FIRDataSnapshot]  {
                    if(rest.value as? String == self.usernameTxtField.text!){
                        self.isUsernameTaken = true
                    }else{
                        self.isUsernameTaken = false
                    }
                }
                completion(result:errorFound)
            }else{
                self.isUsernameTaken = false
                completion(result:errorFound)
            }
        })
    }

Firebase中的數據結構是這樣的:

字母數字應該是UID,用戶名是admin

該列表將如前所述增長,但現在僅用於測試目的。

提前致謝

更新:

 func usernameValidation(completion: (result: NSError) -> Void)
    {
        let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)

        dbReference.child("usernamesTaken").queryEqualToValue(self.usernameTxtField.text!).observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in

            print(snapshot.childrenCount)
        })
    }

讓Firebase執行查詢,而不是自己進行搜索。 FIRDatabaseQuery允許您按鍵或值FIRDatabaseQuery進行排序和過濾。 在您的情況下,您可以使用queryEqualToValue查找與usernamesTaken匹配的usernameTxtField.text子代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM