Проверка подлинности пользователя Firebase в делегате приложения - PullRequest
0 голосов
/ 29 августа 2018

Я реализовал Firebase Auth и Firebase Database в делегате приложения, который проверяет, вошел ли пользователь в систему или нет. Он проверяет узел 'users' в базе данных, чтобы увидеть, есть ли идентификатор пользователя в дочерних снимках или нет, и эта операция занимает около 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 - это начальный viewController. Когда экран запуска исчезает, показывается viewController входа в систему, и если пользователь вошел в систему, показывается Main viewController, но в этом случае есть временной интервал 2-3 секунды, для которого показывается viewController входа в систему. Я тоже пытался реализовать NavigationController, но та же проблема.

Так как я могу не отображать Login viewController, если пользователь вошел в систему и сразу перешел к главному viewController, и эффективно управлял этим 2-3-секундным интервалом времени.

1 Ответ

0 голосов
/ 29 августа 2018

Отслеживайте переменную isLogin в локальном сеансе, делайте ее истинной и ложной при успешном входе и выходе из системы. При первом входе в систему проверяется переменная сеанса isLogin. Вы можете сохранить сеанс в UserDefault или Keychain. Таким образом, вы можете избежать вашей проблемы.

Или вам просто нужно проверить это так:

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

После этого, когда вы захотите перейти на viewController, сделайте все остальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...