Чтение определенных данных из базы данных Firebase Realtime - PullRequest
1 голос
/ 20 октября 2019

Я создал базу данных Firebase, где я храню пользователей, зарегистрированных в моем приложении. Структура базы данных:

enter image description here

Мой код извлекает всех пользователей, сохраненных в моей базе данных

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    let database = Database.database().reference()
    let usuarios = database.child("usuarios")

    usuarios.observe(DataEventType.childAdded) { (snapshot) in
        let dados = snapshot.value as? NSDictionary

        let autenticacao = Auth.auth()
        let idUsuarioLogado = autenticacao.currentUser?.uid

        let emailUsuario = dados?["email"] as! String
        let nomeUsuario = dados?["nome"] as! String
        let perfilUsuario = dados?["perfil"] as! String
        let idUsuario = snapshot.key

        let usuario = Usuario(email: emailUsuario, nome: nomeUsuario, uid: idUsuario, perfil: perfilUsuario)
        print("\(usuario.email) e \(usuario.nome) e \(usuario.uid) e \(usuario.perfil)")

        autenticacao.addStateDidChangeListener { (autenticacao, usuario) in
            if let usuarioLogado = usuario {

                print("Test")
            }
        }
     }

}

Результат из кода выше:

Authenticated user Optional("NjZhCqk9pnSlTltfZl6oxa5vdd53")
aa@gmail.com e aa e NjZhCqk9pnSlTltfZl6oxa5vdd53 e usuario
Authenticated user Optional("NjZhCqk9pnSlTltfZl6oxa5vdd53")
bb@gmail.com e bb e OzZjDzH1IyNE8IRQFAkqEgEUr5v2 e usuario
Authenticated user Optional("NjZhCqk9pnSlTltfZl6oxa5vdd53")
cc@gmail.com e cc e Y0WBAz6kEXQKMg3LjW4V2Vx8kzz1 e usuario

Я ищу, чтобы получить "perfil", связанный с вошедшим в систему пользователем (не для всех), но с помощью моего кода я получаю информацию обо всех пользователях.

Как я могуполучить только "perfil" от текущего вошедшего в систему пользователя?

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

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

Примерно так:

if Auth.auth().currentUser != nil {
    let uid = Auth.auth().currentUser?.uid

    let database = Database.database().reference()
    let usuarios = database.child("usuarios")

    usuarios.child(uid).observe(.value) { (snapshot) in
        let dados = snapshot.value as? NSDictionary

        let emailUsuario = dados?["email"] as! String
        let nomeUsuario = dados?["nome"] as! String
        let perfilUsuario = dados?["perfil"] as! String
        let idUsuario = snapshot.key

        let usuario = Usuario(email: emailUsuario, nome: nomeUsuario, uid: idUsuario, perfil: perfilUsuario)
        print("\(usuario.email) e \(usuario.nome) e \(usuario.uid) e \(usuario.perfil)")
     }
}

Это будет считывать данные пользователя из базы данных, если они вошли в систему при создании представления. Если вы хотите всегда загружать эти данные при входе в систему, даже если это произойдет позже, вы можете использовать addStateDidChangeListener. Аналогично тому, как вы уже это делаете, но вы должны прикрепить наблюдателя внутри в этом случае к обратному вызову / закрытию.

0 голосов
/ 20 октября 2019

Я думаю, вам нужно сначала получить идентификатор пользователя, а затем прочитать конкретного дочернего элемента let usuario = database.child ("usuarios"). Child (idUsuarioLogado) . Если вы начинаете этот проект, я рекомендую вам посмотреть Firestore, это намного лучше.

let autenticacao = Auth.auth()
let idUsuarioLogado = autenticacao.currentUser?.uid
// Do any additional setup after loading the view.
let database = Database.database().reference()
let usuarios = database.child("usuarios").child(idUsuarioLogado)

usuario.observe(.value) { (snapshot) in
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...