Seems to me caching your local user object into a localStorage object is the best way to go, that’s what I’m doing.
When the app starts you can have it look for an object in the localStorage and assign it to the scope on load. Then, see if the conditions for login are met (username/key etc) and off you go.
You can create a service to handle your user/authentication requests which always writes to the local store first, then reloads from the storage on each major update.