Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firebase登录持久性_Swift_Firebase_Firebase Authentication - Fatal编程技术网

Swift Firebase登录持久性

Swift Firebase登录持久性,swift,firebase,firebase-authentication,Swift,Firebase,Firebase Authentication,我正在使用Firebase处理我的应用程序的用户注册和登录。但如果我登录,然后完全关闭我的应用程序,用户将被迫重新登录。我想让用户保持登录状态,除非他们单击“注销” 我的登录码是: Auth.auth().signIn(withEmail: email, password: password, completion: {(user, error) in if let firebaseError = error { print

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

我的登录码是:

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

除非特别要求注销,否则如何让该用户保持登录状态?

检查该用户是否已登录:

if Auth.auth().currentUser != nil {
 // User is signed in.
 // ...
} else {
  // No user is signed in.
 // ...
}
如果用户已登录,则转到主页
ViewController
。这样,当他再次打开应用程序时,他将转到主页
ViewController
,除非他注销
FIRAuth.auth().signOut()


有关更多信息,请检查此项:

要保留用户登录,您需要检查currentUser Auth session,如果它不是nil,则可以将用户重定向到主屏幕

在FirebaseApp.configure()代码之后,通过选项调用“setRootViewController”方法

Swift 4

    func setRootViewController() {
        if Auth.auth().currentUser != nil {
            // Set Your home view controller Here as root View Controller
            self.presentTabBar()
        } else {
            // Set you login view controller here as root view controller
        }
    }

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

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

guard let uid = Auth.auth().currentUser?.uid else {
    return print("no current user!")
}
因此,在应用程序的启动屏幕上,只需:

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()
    }
就这么简单。所以像往常一样

    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
    }

那么,我应该把它放在我的登录视图控制器、AppDelegate或where中吗?在登录视图控制器之前创建一个视图控制器并将其放在那里。它将是应用程序打开时的第一个视图控制器。这样,它将在开始时检查,并将转到右侧
ViewController
。您好,我已尝试实现此功能(很抱歉延迟)。我的FirebaseApp.configure()位于我的AppDelegate中。然而,当我试图声明presentTabBar()函数时,我得到一个错误,说AppDelegate没有memeber。我认为这是因为AppDelegate不是viewController。我可以用另一种方式实现它吗/ViewController?