簡體   English   中英

如果用戶名已在使用中,請檢查Firebase數據庫

[英]Check Firebase database if username is already in use

我正在嘗試驗證用戶輸入的用戶名是否已被使用。 該代碼當前檢查電子郵件是否在使用中,如果不存在則創建用戶。 如何使它讀取數據庫以查看用戶名是否已被使用?

FIRAuth.auth()?.createUser(withEmail: email!, password: password!) { (user, error) in
    if error?._code == (FIRAuthErrorCode.errorCodeInvalidEmail.rawValue)
    {
        var ref: FIRDatabaseReference!
        ref = FIRDatabase.database().reference()
        ref.child("Users").observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in

            if snapshot.hasChild(name!){
                ref.child("users").child((user?.uid)!).setValue(["username": name])
                print("true rooms exist")
            } else {
                self.displayMyAlertMessage(userMessage: "Username already in use. Please choose another.")
                print("false room doesn't exist")
            }
        })
    } else {
        self.displayMyAlertMessage(userMessage: "Email already in use. Please see the login page.")
        return
    }
}

您可以做的是創建另一個孩子,例如“ takenUsernames”,並將所有用戶名存儲在此處。 像這樣,即使用戶未通過身份驗證,您也可以檢查用戶是否被盜。 您還必須將規則添加到數據庫中。

數據庫規則:

"takenUsernames": {
        ".read": true,
        ".write": "auth != null",
        "$username": {
        ".validate": "!root.child('takenUsernames').hasChild($username)"
        }
      }

在Swift中,您可以這樣操作,其中用戶名是textField中的值。 它基本上只是獲取用戶名,並檢查takenUsername子級中是否存在該用戶名:

let usernamesRef = FIRDatabase.database().reference().child("takenUsernames")
                usernamesRef.child(username).observeSingleEvent(of: .value, with: { (snapshot) in
                    if snapshot.exists() {
                        //Username is already taken
                    } else {
                      //Username doesn't exist, do your stuff
}

現在,每次注冊用戶時,您都必須將鍵值對添加到takeedUsernames子級中。 就我而言,我是這樣做的:

usernamesRef.updateChildValues([username:uid])

希望您能明白。

暫無
暫無

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

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