FIREBASE CRUD récupérer nom et prénom

FIREBASE CRUD récupérer nom et prénom

Etape 4

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)  
        }
    }
}