Firebase 登录持久性 Swift

Eog*_*sey 5 firebase swift firebase-authentication

我正在使用 Firebase 来处理我的应用程序的用户注册和登录。但是,如果我登录,然后完全关闭我的应用程序 - 用户将被迫重新登录。我想保持用户登录状态,除非他们单击“注销”

我的登录代码是这样的:

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

除非明确告知注销,否则如何保持该用户登录状态?

Fat*_*tie 3

这是 2020 年的一个方便的完整示例:

在 iOS+Firebase 应用程序中的任何位置,您都可以简单地说:

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

因此,在应用程序的启动屏幕上,只需:

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()
    }
Run Code Online (Sandbox Code Playgroud)

就是这么简单。那么然后像往常一样...

    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
    }
Run Code Online (Sandbox Code Playgroud)