我建設使用火力地堡的初始SignInViewController
加載一個登錄頁面爲用戶提供電子郵件,其中觸發以下驗證的應用程序方法:火力地堡 - iOS設備斯威夫特:FIRAuth.auth()signOut()不註銷當前用戶
@IBAction func didTapSignIn(sender: AnyObject) {
let email = emailField.text
let password = passwordField.text
FIRAuth.auth()?.signInWithEmail(email!, password: password!) { (user, error) in
if let error = error {
print(error.localizedDescription)
return
}
self.signedIn(user!)
}
}
func signedIn(user: FIRUser?) {
AppState.sharedInstance.displayName = user?.displayName ?? user?.email
AppState.sharedInstance.signedIn = true
NSNotificationCenter.defaultCenter().postNotificationName(Constants.NotificationKeys.SignedIn, object: nil, userInfo: nil)
performSegueWithIdentifier(Constants.Segues.SignInToHome, sender: nil)
}
的SignInViewController
還檢查是否存在時,應用程序啓動,如果是這樣,跡象表明,用戶在緩存當前用戶:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
//Synchronously gets the cached current user, or null if there is none.
if let user = FirebaseConfigManager.sharedInstance.currentUser {
self.signedIn(user)
}
}
一旦用戶登錄,應用程序跳至HomeScreenViewController
,顯示「註銷」 「按鈕在導航欄的左上角。當用戶點擊「退出」按鈕,用戶應該就會退出該應用還應具有以下方法Segue公司回SignInViewController
:
@IBAction func didTapSignOut(sender: UIBarButtonItem) {
print("sign out button tapped")
let firebaseAuth = FIRAuth.auth()
do {
try firebaseAuth?.signOut()
AppState.sharedInstance.signedIn = false
dismissViewControllerAnimated(true, completion: nil)
} catch let signOutError as NSError {
print ("Error signing out: \(signOutError)")
} catch {
print("Unknown error.")
}
}
當我點擊了「退出」按鈕, didTapSignOut
方法被調用並被執行。 然而,try firebaseAuth?.signOut()
行代碼被執行之後,當前用戶應nil
。但是,當我打印出Xcode控制檯中當前用戶,當前用戶仍然登錄:
po FIRAuth.auth()?.currentUser
▿ Optional<FIRUser>
- Some : <FIRUser: 0x7fde43540f50>
由於當前用戶沒有得到firebaseAuth?.signOut()
後註銷被調用,應用程式塞格斯回SignInViewController
該應用仍認爲存在緩存的當前用戶,以便用戶再次登錄。
難道這是一個鑰匙扣問題?
是否有NSNotificationCenter.defaultCenter().postNotificationName
做被稱爲?
我的代碼直接來自谷歌火力地堡斯威夫特程式碼實驗室,所以我不知道爲什麼它不工作: https://codelabs.developers.google.com/codelabs/firebase-ios-swift/#4
http://stackoverflow.com/a/39170080/6297658 – Dravidian
謝謝@Dravidian,我來看看。 – alexisSchreier
@Dravidian,感謝您的參考。但是,即使當我嘗試在應用程序回退到登錄頁面後在viewWillAppear(animated:Bool)方法中打印currentUser時,當前用戶也不是零。您是否說因爲.signOut()方法的異步完成,用戶在viewWillAppear(animated:Bool)方法檢查用戶是否仍然登錄之前沒有及時註銷?如果是這樣,我只有在signOut()方法成功時才確保執行當前用戶的檢查。 – alexisSchreier