Log Out Firebase

Bonjour à tous.

J’ai crée une application de restauration qui permet d’effectuer des reservation.J’ai utilisé Firebase pour les données utilisateurs.Cependant,j’ai testé différentes façons de déconnecter l’utilisateur de son profil et de retourner à l’écran de connection (à l’aide d’un bouton déconnection) mais je n’y arrive pas.

Est ce que quelqu’un a une idée s’il vous plait?

import UIKit
import FirebaseAuth
import FirebaseDatabase


class ProfilesViewController: UIViewController {
    
    
    lazy var containerView: UIView = {
        let view = UIView()
        view.backgroundColor = .black
       
        view.addSubview(profileImageView)
        profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        profileImageView.anchor(top: view.topAnchor, paddingTop: 150,
                                width: 120, height: 120)
        profileImageView.layer.cornerRadius = 120 / 2
        profileImageView.isUserInteractionEnabled = true
        
        view.addSubview(nameLabel)
        nameLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        nameLabel.anchor(top: profileImageView.bottomAnchor, paddingTop: 50)
        
        view.addSubview(emailLabel)
        emailLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        emailLabel.anchor(top: nameLabel.bottomAnchor, paddingTop: 12)
        
        view.addSubview(reservationlabel)
        reservationlabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        reservationlabel.anchor(top: emailLabel.bottomAnchor, paddingTop: 120)
        
        view.addSubview(reserveButton)
        reserveButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        reserveButton.anchor(top : reservationlabel.bottomAnchor,paddingTop: 40)
        
        view.addSubview(logOut)
        logOut.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        logOut.anchor(top : reserveButton.bottomAnchor,paddingTop: 250)
        
        /* view.addSubview(reserveButton)
         reserveButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
         emailLabel.anchor(top: emailLabel.bottomAnchor,paddingTop: 20)*/
        
        return view
    }()
    
    
    @objc private func didTapChangeProfilePic() {
        presentPhotoActionSheet()
    }
    
   private  var reservationlabel: UILabel = {
        let label = UILabel()
        label.textAlignment = .left
       // label.text = "Vous pouvez reserver en appuyant sur le bouton"
       label.font = UIFont.boldSystemFont(ofSize: 16)
       // label.font = UIFont(name: "AvenirNext-BoldItalic", size: 16)
       label.numberOfLines = 0
        label.textColor = .white
        return label
    }()
    
    
    
    private let reserveButton : UIButton = {
        let button = UIButton()
        button.setTitle("Reserver", for: .normal)
        button.backgroundColor = .black
        button.tintColor = .white
        button.layer.cornerRadius = 12
        button.layer.borderWidth = 1
        button.titleLabel?.font = UIFont(name: "AvenirNext-BoldItalic", size: 20)
        button.layer.masksToBounds = true
        return button
        
    }()
    
    
    let profileImageView: UIImageView = {
        let profileImageView  = UIImageView()
        profileImageView.image = UIImage(systemName: "person.circle")
        profileImageView.contentMode = .scaleAspectFill
        profileImageView.clipsToBounds = true
        profileImageView.layer.borderWidth = 3
        profileImageView.layer.borderColor = UIColor.white.cgColor
        return profileImageView
    }()
    
 
    
    let nameLabel: UILabel = {
        let label = UILabel()
        label.textAlignment = .center
        label.font = UIFont.systemFont(ofSize: 30)
        label.textColor = .white
        return label
    }()
    
    let emailLabel: UILabel = {
        let label = UILabel()
        label.textAlignment = .center
        label.font = UIFont.systemFont(ofSize: 16)
        label.textColor = .lightGray
        return label
    }()
    
    private let logOut : UIButton = {
        let button = UIButton()
        button.setTitle("Deconnection", for: .normal)
        button.backgroundColor = .darkGray
        button.setTitleColor(.red, for: .normal)
        button.layer.cornerRadius = 12
        button.layer.borderWidth = 1
        button.layer.masksToBounds = true
        button.titleLabel?.font = .systemFont(ofSize: 15, weight: .regular)
        return button
        
    }()
    
    
    override func viewDidLoad() {
        set()
        super.viewDidLoad()
        navigationItem.rightBarButtonItem = UIBarButtonItem(image: .init(systemName: "power.circle.fill"), style: .plain, target: self, action: nil)
        navigationItem.rightBarButtonItem?.tintColor = .red
        logOut.addTarget(self, action: #selector(signOut), for: .touchUpInside)
        reserveButton.addTarget(self, action: #selector(openReserve), for: .touchUpInside)
        
        if let user = Auth.auth().currentUser {
            
            let ref = Database.database().reference()
            let uiserID = Auth.auth().currentUser?.uid
            
            ref.child("users").child(uiserID!).observeSingleEvent(of: .value) { (snapshot) in
                let value = snapshot.value as? NSDictionary
                let username = value?["username"] as? String ?? "no username"
                let firstName = value?["firstname"] as? String ?? ""
                let lastName = value?["lastname"] as? String ?? ""
                
                self.emailLabel.text = "\(username)"
                self.nameLabel.text = "\(firstName) \(lastName)"
                self.reservationlabel.text = "\(firstName),vous pouvez effectuer une réservation"
              
            }
            
            
        } else {
            fatalError("⛔️ Erreur : aucun utilisateur est connecté lors de l'affichage de l'écran d'accueil")
        }
        
        
        
        view.addSubview(containerView)
        // view.addSubview(secondView)
        containerView.anchor(top: view.topAnchor, left: view.leftAnchor,
                             right: view.rightAnchor, height: 800)
  
        let gesture = UITapGestureRecognizer(target: self, action: #selector(didTapChangeProfilePic))

        profileImageView.addGestureRecognizer(gesture)
       
        
    }
    
    @objc private func signOut(){
        do {
            try Auth.auth().signOut()
            dismiss(animated: true, completion: nil)
        } catch {
            print("Impossible de deconnecter l'utilisateur")
        }
        
        
    }
    
    @objc private func openReserve(){
     
        UIApplication.shared.open(URL(string:"https://reservation.dish.co/widget/hydra-b0409b90-8c2a-11e9-86e6-6720499d7bcc" )! as URL,options : [:], completionHandler : nil)
        
        
        
    }
    
    func set(){
        Utilities.styleBlackRoundedButton(reserveButton)
    }
    
    @objc private func didTapRegister() {
        let vc = HomeViewController()
        vc.title = "Create Account"
        navigationController?.pushViewController(vc, animated: true)
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
    
    
}

extension UIColor {
    static func rgb(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor {
        return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1)
    }
    
    static let mainBlue = UIColor.rgb(red: 0, green: 150, blue: 255)
}

extension UIView {
    
    func anchor(top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, paddingTop: CGFloat? = 0,
                paddingLeft: CGFloat? = 0, paddingBottom: CGFloat? = 0, paddingRight: CGFloat? = 0, width: CGFloat? = nil, height: CGFloat? = nil) {
        
        translatesAutoresizingMaskIntoConstraints = false
        
        if let top = top {
            topAnchor.constraint(equalTo: top, constant: paddingTop!).isActive = true
        }
        
        if let left = left {
            leftAnchor.constraint(equalTo: left, constant: paddingLeft!).isActive = true
        }
        
        if let bottom = bottom {
            if let paddingBottom = paddingBottom {
                bottomAnchor.constraint(equalTo: bottom, constant: -paddingBottom).isActive = true
            }
        }
        
        if let right = right {
            if let paddingRight = paddingRight {
                rightAnchor.constraint(equalTo: right, constant: -paddingRight).isActive = true
            }
        }
        
        if let width = width {
            widthAnchor.constraint(equalToConstant: width).isActive = true
        }
        
        if let height = height {
            heightAnchor.constraint(equalToConstant: height).isActive = true
        }
    }
    
    
}

extension ProfilesViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    func presentPhotoActionSheet() {
        let actionSheet = UIAlertController(title: "Photo de profil",
                                            message: "Voulez vous choisir une photo?",
                                            preferredStyle: .actionSheet)
        actionSheet.addAction(UIAlertAction(title: "Annuler",
                                            style: .cancel,
                                            handler: nil))
        actionSheet.addAction(UIAlertAction(title: "Prendre une photo",
                                            style: .default,
                                            handler: { [weak self] _ in
            
            self?.presentCamera()
            
        }))
        actionSheet.addAction(UIAlertAction(title: "Choisir une photo",
                                            style: .default,
                                            handler: { [weak self] _ in
            
            self?.presentPhotoPicker()
            
        }))
        
        present(actionSheet, animated: true)
    }
    
    
    
    
    func presentCamera() {
        let vc = UIImagePickerController()
        vc.sourceType = .camera
        vc.delegate = self
        vc.allowsEditing = true
        present(vc, animated: true)
    }
    
    
    func presentPhotoPicker() {
        let vc = UIImagePickerController()
        vc.sourceType = .photoLibrary
        vc.delegate = self
        vc.allowsEditing = true
        present(vc, animated: true)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true, completion: nil)
        guard let selectedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage else {
            return
        }
        
        self.profileImageView.image = selectedImage
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
    
}

Salut @Neo972,

Pour moi, en cliquent sur déconnexion, j’envoie la requête de déconnexion dans ton cas, Firebase et quand je reçois la réponse positive, je lance une transition de vue vers la page voulue.

Dans le cas contraire, tu as une erreur et donc tu n’es pas déconnecté

Problème résolu.J’ai crée une fonction de déconnexion.

@objc private func deco(){

    let actionSheet = UIAlertController(title: "Vos données personnelles ne seront plus accessibles.Voulez vous vraiment effectuer cette opération?", message: "", preferredStyle: .actionSheet)
    actionSheet.addAction(UIAlertAction(title: "Se déconnecter", style: .destructive, handler: { action in
        try! Auth.auth().signOut()
         if let storyboard = self.storyboard {
             let vc = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
             self.present(vc, animated: false, completion: nil)
             }
    }))
    
    actionSheet.addAction(UIAlertAction(title: "Annuler", style: .cancel, handler: { action in
      
    }))
    
    
    
    present(actionSheet, animated : true)
    
     
    
   
    }
1 « J'aime »