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:
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.
J'apprécierais toute aide :) Merci!
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
})
{
"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. :)
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)
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!)
})
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)")
}