Swift Firebase登录持久性
我正在使用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
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?