我创建了一个Firebase数据库,用于存储注册到我的应用程序的用户。 数据库结构是
我的代码检索保存到我的数据库中的所有用户
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
我希望检索与已登录用户(并非全部)相关的“性能”,但是,使用我的代码,我可以检索所有用户信息。
如何从当前登录用户中仅检索“性能”?
答案 0 :(得分:2)
现在,您正在读取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
。与您已经执行的操作类似,但是在这种情况下,您应该将观察者附加在内部。
答案 1 :(得分:0)
我认为您需要获取用户ID,然后读取特定的孩子让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 ....