web-dev-qa-db-fra.com

Firebase Récupération de données dans Swift

J'essaie de récupérer des données spécifiques de l'utilisateur actuellement connecté. Mes données dans ma base de données ressemblent à ceci:

enter image description here

Par exemple, je veux simplement saisir le nom complet et le sauvegarder dans une variable nomUtilisateur. Ci-dessous, ce que j'utilise pour récupérer mes données 

ref.queryOrderedByChild("full_name").queryEqualToValue("userIdentifier").observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
            print(snapshot.value)
            // let userName = snapshot.value["full_name"] as! String
        })

Malheureusement, c’est ce que ma console affiche.

enter image description here

J'apprécierais toute aide :) Merci!

6
Tim

Il vous donne ce message d'avertissement indexOn parce que vous faites une requête.

vous devez définir les clés sur lesquelles vous allez indexer via .indexOn règle dans vos règles de sécurité et de Firebase. Alors que vous êtes autorisé à créer ces requêtes ad-hoc sur le client, vous verrez beaucoup amélioration des performances lors de l'utilisation de .indexOn

Comme vous connaissez le nom que vous recherchez, vous pouvez accéder directement à ce nœud, sans interrogation.

    let ref:FIRDatabaseReference! // your ref ie. root.child("users").child("[email protected]")

    // only need to fetch once so use single event

    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in

        if !snapshot.exists() { return }

        //print(snapshot)

        if let userName = snapshot.value["full_name"] as? String {
            print(userName)
        }
        if let email = snapshot.value["email"] as? String {
            print(email)
        }

        // can also use
        // snapshot.childSnapshotForPath("full_name").value as! String
    })
12
DogCoffee
{
    "rules": {
         "tbl_name": {
            ".indexOn": ["field_name1", "field_name2"]
         },
    ".read": true,
    ".write": true
    }
}

Vous pouvez appliquer indexOn sur n’importe quel champ. Ajoutez ce code json dans l'onglet Sécurité et règles du ........ J'espère que cela fonctionne pour vous. :)

2
Roshni

Il récupère les données de l'utilisateur connecté:

let ref = FIRDatabase.database().reference(fromURL: "DATABASE_URl")
let userID = FIRAuth.auth()?.currentUser?.uid
let usersRef = ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
2
urvashi bhagat

Swift 4  

let ref = Database.database().reference(withPath: "user")
    ref.observeSingleEvent(of: .value, with: { snapshot in

        if !snapshot.exists() { return }

        print(snapshot) // Its print all values including Snap (User)

        print(snapshot.value!)

        let username = snapshot.childSnapshot(forPath: "full_name").value
        print(username!)

    })
1
Khawar Islam
let ref = Database.database().reference().child("users/[email protected]")


    ref.observeSingleEvent(of: .value, with: { (snap : DataSnapshot)  in

        print("\(String(describing:  snap.value))")


    }) { (err: Error) in


        print("\(err.localizedDescription)")

    }
0
Ranjan