如何让用户保持登录状态?迅速

Won*_*r A 3 firebase swift firebase-authentication

我正在使用 firebase 登录,我需要知道如何在注销之前保持登录状态。我听说过 UserDeafults,但我不确定如何使用它。这是我的登录视图控制器:

import FirebaseAuth
import FirebaseFirestore
import Firebase
import FirebaseAnalytics
import UIKit


class LoginViewController: UIViewController {



    @IBOutlet weak var emailTextField: UITextField!

    @IBOutlet weak var passwordTextField: UITextField!


    @IBOutlet weak var loginButton: UIButton!


    @IBOutlet weak var errorLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        setUpElements()

        if Auth.auth().currentUser != nil {
           // User is signed in.
           DispatchQueue.main.async {
              self.presentHomeViewController()
           }
        } else {
          // No user is signed in.
        }

    }



    func setUpElements() {

        // Hide the error label
        errorLabel.alpha = 0

        // Style the elements
        Utilities.styleTextField(emailTextField)
        Utilities.styleTextField(passwordTextField)
        Utilities.styleFilledButton(loginButton)

    }

    func presentHomeViewController() {
       let homeViewController = self.storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? ViewController
       self.view.window?.rootViewController = homeViewController
       self.view.window?.makeKeyAndVisible()
    }

    @IBAction func loginTapped(_ sender: Any) {
        // TODO: Validate Text Fields

        // Create cleaned versions of the text field
        let email = emailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        let password = passwordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)

        // Signing in the user
        Auth.auth().signIn(withEmail: email, password: password) { (result, error) in

            if error != nil {
                // Couldn't sign in
                self.errorLabel.text = error!.localizedDescription
                self.errorLabel.alpha = 1
            }
            else {
                self.presentHomeViewController()
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Pic*_*ode 7

如果你不logOut。用户保持login状态。检查is logged in user exist

Auth.auth().addStateDidChangeListener { auth, user in
            if user != nil{
                //Logged in user exist.
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是你的segue id。随便写: 在此处输入图片说明

为您的代码编辑:

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.

setUpElements()

Auth.auth().addStateDidChangeListener { auth, user in
        if user != nil{
            // User is signed in.
            print("User is not logged out.")
            self.performSegue(withIdentifier: "yourSegueId", sender: nil)
        } else {
            // No user is signed in.
            print("No user is signed in.")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...