2017-02-02 3 views
1

Этот вопрос задается перед: Firebase sign out not working in Swift Logging a user out with Firebase 3 and Swift still shows the `currentUser` Firebase - iOS Swift: FIRAuth.auth().signOut() not signing out current userВыход на Facebook, Firebase

Однако все ответы не работает для меня. У меня есть VC 1, где пользователь может войти в систему, а в viewdidappear у меня есть печать, которая печатает пользователя? .uid. В VC 2 у меня есть кнопка, которая должна отключала пользователя и восходит к VC 1. Код в VC 2:

@IBAction func logOut(_ sender: UIButton) { 
    if FIRAuth.auth()?.currentUser != nil { 
     do { 
      try! FIRAuth.auth()!.signOut() 

     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } 
    FBSDKAccessToken.setCurrent(nil) 
    loggedIn = false 
    storedValuesData.setValue(nil, forKey: "savedLoginEmail") 
    storedValuesData.setValue(nil, forKey: "savedLoginPassword") 
    jumpToVC1() 
} 

Когда я вернулся в VC 1, когда пользователь нажал кнопку выхода из системы, печать снова распечатывает UID пользователя. Но этот пользователь должен быть выведен из системы, поэтому печать должна быть нулевой. Как я могу убедиться, что VC 1 представлен только тогда, когда я уверен, что пользователь вышел из системы? Я думал, что блокировка завершения будет приятной, но я не знаю, как это будет работать здесь ...

ответ

4

Вам не нужны блоки завершения, поскольку метод синхронный.

@IBAction func logOut(_ sender: UIButton) { 
    guard FIRAuth.auth()?.currentUser != nil else { 
     return 
    }    

    do { 
     try FIRAuth.auth()?.signOut() 
     FBSDKAccessToken.setCurrent(nil) 
     loggedIn = false 
     storedValuesData.setValue(nil, forKey: "savedLoginEmail") 
     storedValuesData.setValue(nil, forKey: "savedLoginPassword") 
     jumpToVC1() 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
}