Ich benutze E-Mail + Passwort-Authentifizierung mit Firebase für meine App beharren. Login funktioniert, und ich verwende observeAuthEventWithBlock
, um zu überprüfen, ob ein Benutzer angemeldet ist - um die Anmeldeseite nicht aufzurufen. Wenn ich die Home-Taste drücke und die App wieder öffne, ist das kein Problem. Das Problem, das ich habe, ist, wenn ich die App erzwinge. Wenn ich wieder öffne, muss ich mich erneut einloggen.Wie Firebase authdata nach Sofort beenden (iOS)
Einige Hinweise über das Setup vor dem zeige ich meine Login-Code.
- Es gibt eine LoginViewController - nicht eingebettet - gebaut w/Storyboard
- Dieses Angebot an einen Navigation-Controller verbunden ist
- Das ist, was der erste Bildschirm eingebettet in ist, und der Rest der App verwendet diese Nav Regler.
Login-Code:
@IBAction func loginButtonPressed() {
let userEmail = emailTextField.text
self.ref.authUser(self.emailTextField.text, password: self.passwordTextField.text, withCompletionBlock: { (error, auth) -> Void in
guard error == nil else {
if let errorCode = FAuthenticationError(rawValue: error.code) {
switch (errorCode) {
case .EmailTaken:
self.displayMessage("Email Error", theMessage: "This email is taken")
case .InvalidEmail:
self.displayMessage("Email Error", theMessage: "This email is invalid")
case .UserDoesNotExist:
self.displayMessage("User Error", theMessage: "A user account for email: \(userEmail!) does not exist")
case .InvalidPassword:
self.displayMessage("Password Error", theMessage: "The password is incorrect")
case .NetworkError:
self.displayMessage("Network Error", theMessage: "Seems like there's a problem with your internet connection")
default:
return
}
}
return //set Unknown Error Alert here
}
print("LOGGED IN: segue from loginButtonPressed")
self.userLoggedIn = true
print("user is logged in? \(self.userLoggedIn)")
self.performSegueWithIdentifier("loginLocaleSegue", sender: self)
})
}
Überprüfen Sie, ob Benutzer angemeldet ist - wenn ja NAVCON segue, es Pop und Embedded-View-Controller angezeigt werden:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if self.userLoggedIn.boolValue == true {
ref.observeAuthEventWithBlock { (authData) -> Void in
if authData != nil {
let navCon: UINavigationController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("MainNavigationController") as! UINavigationController
self.presentViewController(navCon, animated: false, completion: nil)
navCon.popViewControllerAnimated(false)
print("user is authenticated: \(authData.providerData["email"] as! String)")
print("segues from viewDidAppear")
} else {
return
}
}
}
}
Ich habe ähnliche gesehen Fragen zu Firebase-Auth, die besagt, dass Authdata standardmäßig in Keychain gespeichert ist, was zu Problemen mit Authdata führt, die auch nach dem Löschen der App persistieren, aber ich habe das komplette gegenteilige Problem. Irgendwelche Ideen?