Pour récupérer sur la base de données, le nom et le prénom de l'utilisateur qui vient d'être créer lors de l'authentification, dans Xcode, ajouter un modèle utilisateur dans un nouveau fichier "User.swift". Spécifier "import FirebaseFirestore"
import Foundation
import FirebaseFirestore
class user {
var ref: DocumentReference
var uid: String
var surname: String
var name: String
init(_ document: DocumentSnapshot) {
ref = document.reference
uid = document.documentID
let data = document.data() ?? [:]
name = data["name"] as? String ?? ""
surname = data["surname"] as? string ?? ""
}
}
Pour récupérer l'Id de cet utilisateur, dans "FireAuth.swift", ajouter une méthode "myId()"
func myId() -> String? {
return Auth.auth().currentUser?.uid
}
Dans "FireDatabase.swift", ajouter une méthode avec une complétion, qui permet de récupérer un document snapshot de la base de données "collection users". Ce document comprendra un "user" en optional (avec "name", "surname", "uid")
typealias UserCompletion = (_ user: User?) -> Void
func getMe(completion: UserCompletion?) {
if let uid = FireAuth().myId() {
usersCollection.document(uid).addSnapshotListener { (doc, error) in
if error != nil {
print(error?.localizedDescription as Any)
completion?(nil)
}
if doc != nil {
print(doc!.data() as Any)
let newUser = User(doc!)
print(newUser.name)
completion?(newUser)
}
}
} else {
completion?(nil)
}
}
Cette méthode peut être appeler dans un ViewController. Par exemple un ProfilController, avec des TextField, pour afficher les données récupérées et pouvoir les modifier par la suite, un bouton valider et un bouton déconnexion.
import UIKit
class ProfilController: UIViewController {
@IBOutlet weak var profilImage: UIImageView!
@IBOutlet weak var nameTF: UITextField!
@IBOutlet weak var surnameTF: UITextField!
@IBOutlet weak var adresseMailTF: UITextField!
@IBOutlet weak var passWordTF: UITextField!
@IBOutlet weak var pseudoTF: UITextField!
var user: User?
override func viewDidLoad() {
super.viewDidLoad()
completeForm()
}
func completeForm() {
FireDatabase().getMe { (user) in
if let me = user {
print("nouveau => " + me.name)
self.user = me
self.nameTF.text = me.name
self.surnameTF.text = me.surname
}
}
}
@IBAction func validateButton(_ sender: UIButton) {
}
@IBAction func disconnect(_ sender: UIButton) {
if FireAuth().isAuth() {
FireAuth().signOut()
performSegue(withIdentifier: "ToRoot", sender: nil)
}
}
}