Как искать аутентифицированных пользователей Firebase iOS Swift - PullRequest
0 голосов
/ 26 сентября 2019

Я ввел аутентификацию в Firebase через Google и подтвердил, что пользователи отображаются на моей вкладке Аутентификация в консоли Firebase.Сейчас я пытаюсь искать пользователей по их displayName.

. Я замечаю, что, поскольку эти пользователи отображаются на моей вкладке аутентификации, а не в моей базе данных, я не могу их искать.Когда я ищу пользователей, я не получаю результатов.

        let rootRef = Database.database().reference()
        let query = rootRef.child("users")
        query.observe(.value) { (snapshot) in
            for child in snapshot.children.allObjects as! [DataSnapshot] {
                if let value = child.value as? NSDictionary {
                    print(value)
            }
        }
     }

Может кто-нибудь сообщить мне, как я могу искать пользователей, которых я аутентифицировал через вход в Google?Нужно ли также вести список пользователей в моей базе данных?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Что вам нужно сделать, это реализовать базу данных Firebase и Firebase Auth.Это две разные вещи.У вас может быть миллион человек, прошедших аутентификацию с вашим приложением, и при этом в вашей базе данных ничего не останется.

Существуют обратные вызовы, которые возвращают информацию о пользователе после создания учетной записи.В рамках этих обратных вызовов вы должны вызывать базу данных Firebase для получения этих пользовательских данных и сохранять их в базе данных Firebase.

Однако я создал стартовый проект, который сделает все это за вас.Это даже позволяет вашим пользователям проходить аутентификацию через Facebook.Проверьте это: https://github.com/ChopinDavid/FirebaseLoginSignup

Если вы хотите сделать это самостоятельно, однако, вот пример того, как хранить пользовательские данные после обратного вызова Firebase Auth:

func createUserAcct(completion: @escaping (Bool, Error?) -> Void) {
        Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error) in
            if error == nil {

                if let firebaseUser = Auth.auth().currentUser {
                    //After creating the user, I then take the user's inputs (email, display name, etc.) and create a profile change request
                    let changeRequest = firebaseUser.createProfileChangeRequest()
                    //Storing photoURLs requires that we make use of firebase Storage. We can upload an image, get a callback with the URL where the image was stored, and update our user's photoURL
                    changeRequest.photoURL = URL(string: "nil")
                    changeRequest.displayName = self.nameTextField.text!
                    changeRequest.commitChanges { error in
                        if let error = error {
                            // An error happened.
                            completion(false, error)
                        } else {
                            //This is where we actually create an "object" from the inputs the user has given us.
                            //We then take this object and store it in our database under "Users/{ the user's auth uid }"
                            let userData = ["email" : self.emailTextField.text!,"name": self.nameTextField.text!] as [String : Any]
                            Database.database().reference().child("Users").child(firebaseUser.uid).updateChildValues(userData)
                        }
                    }
                }
            } else {
                // An error happened.
                completion(false, error)
            }
        }
    }
0 голосов
/ 26 сентября 2019

Чтобы получить информацию о том, кто зарегистрировался, вы должны добавить данные в базу данных Firebase.Когда вы добавили let query = rootRef.child("users"), который ищет в корне вашей базы данных Firebase набор типа «пользователи».Это должно существовать, чтобы получить список пользователей.

Что бы я сделал, когда вы получите успешную аутентификацию от firebase для входа в систему, вы получите текущий идентификатор пользователя currentUser.uid и будете использовать его в качестве «ключа» к вашим данным, например, rootRef.child(user.uid).setValue(["displayName": displayName]).Это добавляет дочерний узел в вашу базу данных с uid только что созданного пользователя и добавляет что-то вроде «displayName: Brandon» в качестве данных, связанных с этим пользователем.

Таким образом, при поиске пользователей вы получите полный список пользователей в узле «пользователи», а затем сможете получить доступ к данным в каждом из них.Также полезно иметь ключ для каждого узла в качестве пользовательского идентификатора пользователя.Это гарантированно будет уникальным и позволит вам быстро и легко получить доступ к данным пользователя.

Тогда вы сможете использовать свой код для чтения значений из словаря пользователей того, что было сохранено.

Для документации по ней читайте: https://firebase.google.com/docs/database/ios/read-and-write#read_data_once

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...