12
votes

I have an app using Firebase as backend. My App implements Firebase-Authentication API using simple Email and Password login for authenticating.

Everything works fine except for one issue. I would like to maintain the user session even after a user closes the App.

FIRAuth.auth()?.currentUser? has all the user properties (ex: uid, email, token etc...) for the current user which works great. The problem I noticed is that FIRAuth.auth()?.currentUser? is not persistent. So after exiting the app and launching again, it returns null.

I would not like to ask a user every time they open the app to login again. Is there a way around this?

2
Firebase automatically persists the user token in the iOS keychain. It's automatically restored when the app restarts. You can monitor for this with addAuthStateDidChangeListener (see the Firebase Authentcation documentation). If that's not the problem, post the minimum complete code that reproduces the problem.Frank van Puffelen

2 Answers

39
votes

Firebase should already be keeping track of your user through app launches.

Your issue could be with using FIRAuth.auth()?.currentUser? directly rather than the recommended approach.

The recommended way to get the current user is by setting a listener on the Auth object:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in
  if let user = user {
    // User is signed in.
  } else {
    // No user is signed in.
  }
}

By using a listener, you ensure that the Auth object isn't in an intermediate state—such as initialisation—when you get the current user.

In my own application, I use both. If the user doesn't exist with the first method, it moves onto the second, and if that fails, present login/signup screen.

-3
votes

FirAuth has been renamed Auth

Please use latest Firebase pod