应用程序委托中的Firebase用户身份验证检查

时间:2018-08-29 12:43:30

标签: ios swift firebase firebase-realtime-database firebase-authentication

我在应用程序委托中实现了Firebase Auth和Firebase数据库,该应用程序检查用户是否登录,并在数据库中的``用户''节点中进行检查,以查看子快照中是否存在用户ID以及此操作大约需要2-3秒。

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()

    if let uid = Auth.auth().currentUser?.uid {
        Database.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { snapshot in
            if snapshot.exists() {
                print("App Delegate: User found!")
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let vc  = storyboard.instantiateViewController(withIdentifier: "Main")
                self.window?.rootViewController = vc
                self.window?.makeKeyAndVisible()
            }
            else{
                print("App Delegate: User not found!")
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let vc  = storyboard.instantiateViewController(withIdentifier: "Login")
                self.window?.rootViewController = vc
                self.window?.makeKeyAndVisible()
        }
        })
    }
    return true
}

Login viewController是Initial viewController。当启动屏幕淡出时,将显示登录viewController,如果用户已登录,则显示主viewController,但在这种情况下,将显示2-3秒的时间间隔,用于显示登录viewController。 我也尝试实现NavigationController,但存在相同的问题。

因此,如果用户登录并直接进入Main viewController并有效地管理2-3个时间间隔的时间,我怎么不显示Login viewController。

1 个答案:

答案 0 :(得分:0)

本地会话中的isLogin变量保持跟踪,在登录和注销成功时将其设置为true和false。首次登录时,然后检查您的会话变量isLogin。您可以将会话保存在UserDefault或Keychain中。这样可以避免问题。

或者您只需要检查这种方式:

if FIRAuth.auth().currentUser != nil {
   presentHome()
} else {
 //User Not logged in
}

之后,当您导航到所需的viewController时,请在那里做其余的事情。