Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Login Persistence Swift

I'm using Firebase to handle my user register and login for my app. But if I log in, and then close my app entirely - the user is forced to re-log in. I'd like to keep the user logged in unless they click "Log out"

My login code is this:

        Auth.auth().signIn(withEmail: email, password: password, completion: {(user, error) in
            if let firebaseError = error {
                print(firebaseError.localizedDescription)
                return
            }
            self.presentTabBar()
        })
    }
}

How do I keep this user logged in unless specifically told to logout?

like image 280
Eoghan Casey Avatar asked Jan 29 '23 18:01

Eoghan Casey


1 Answers

Here's a handy full example for 2020:

Anywhere in your iOS+Firebase app, you can simply say:

guard let uid = Auth.auth().currentUser?.uid else {
    return print("no current user!")
}

Thus, on the launch screen of your app, simply:

import UIKit
import Firebase
import FirebaseUI

class ViewController: UIViewController, FUIAuthDelegate {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        guard let uid = Auth.auth().currentUser?.uid else {
            return print("no current user, hence AuthUI flow...")
            basicAuthUIFlow()
        }
        print("User .. \(Auth.auth().currentUser?.displayName)")
        continueWhenUserPresent()
    }

It's that easy. So then as usual ...

    private func basicAuthUIFlow() {
        let authUI = FUIAuth.defaultAuthUI()
        authUI?.delegate = self
        let pp: [FUIAuthProvider] = [ FUIGoogleAuth() ]
        authUI?.providers = pp
        if let authVC = authUI?.authViewController() {
            present(authVC, animated: true)
        }
    }

    func authUI(_ authUI: FUIAuth,
      didSignInWith authDataResult: AuthDataResult?,url: URL?, error: Error?) {
        let u = authDataResult?.user
        print("Successful login via authUI \(String(describing: u?.displayName))")
        continueWhenUserPresent()
    }

    private func continueWhenUserPresent() {
        .. pushViewController .. your first screen
    }
like image 88
Fattie Avatar answered Feb 01 '23 00:02

Fattie