2016-03-22 8 views
0

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?

Antwort

0

Von dem, was ich sagen kann, schreiben Sie nicht "self.userLoggedIn = true" zu irgendeiner Datenbank, also macht es Sinn, dass es weiterhin "True" ist, während Sie die App im Leerlauf haben, aber sobald Sie die schließen Anwendung, dann wird es Null (kein Wert), dies ist, weil es nur im Hintergrund chilling ist, während die App geöffnet ist, aber nicht vollständig geschlossen. Versuchen Sie, dies in Ihrer Firebase-Datenbank zu schreiben, wie in diesem Tutorial beschrieben, und sehen Sie, ob das hilft.

https://www.raywenderlich.com/109706/firebase-tutorial-getting-started

Verwandte Themen