Firebaseを使用して、最初にSignInViewController
という名前のアプリケーションを構築しています。方法:Firebase - iOS Swift: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)
}
}
ユーザがログインされた後は、アプリ「」と表示され、「サインアウトナビゲーションバーの左上にあるボタンをクリックします。ユーザーが「ログアウト」ボタンをタップすると、そのユーザーがサインアウトを取得することになっていると、アプリは、以下の方法でバック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
である必要があります。現在のユーザーが
firebaseAuth?.signOut()
後にサインアウトされませんので、アプリがバックにsegues後、呼び出されます
po FIRAuth.auth()?.currentUser
▿ Optional<FIRUser>
- Some : <FIRUser: 0x7fde43540f50>
:私はXcodeのコンソールでの現在のユーザをプリントアウトするときには、現在のユーザーがまだログインしていますSignInViewController
まだキャッシュされている現在のユーザーがいると思うので、ユーザーは再びサインインします。
これはキーチェーンの問題ですか?
NSNotificationCenter.defaultCenter().postNotificationName
と呼ばれることがありますか?私のコードはGoogleのFirebaseスウィフトコードラボから直接来て
ので、私はそれが働いていない理由はわからない: https://codelabs.developers.google.com/codelabs/firebase-ios-swift/#4
http://stackoverflow.com/a/39170080/6297658 – Dravidian
ありがとう@Dravidian、私は見て回ります。 – alexisSchreier
@Dravidian、参考に感謝します。しかし、私がviewWillAppear(animated:Bool)メソッドでcurrentUserを印刷しようとしても、アプリケーションがサインインページに戻ると、現在のユーザーはnilではありません。 .signOut()メソッドが非同期に完了したため、viewWillAppear(animated:Bool)メソッドがそのユーザーがまだサインインしているかどうかをチェックする前に、ユーザーはサインインされていないと言いますか?もしそうなら、** signOut()メソッドが成功した場合にのみ、現在のユーザー**のチェックをどうやって実行すればよいでしょうか? – alexisSchreier