I'm using AFNetworking as a network layer for my iPhone app which connects to a Rails server that uses Devise for authentication. If I sign in (with a POST call) providing username/password then after that any GET I perform is ok.
If I close the app (not just background) then all my GET requests fail because I guess they're not authenticated.
So I presume cookies are stored somewhere; is there a way to save them in NSUserDefaults
or somewhere like that in order to avoid logging in all the time?
You do not need to bother with NSUserDefaults nor any keychain wrapper if you use
NSURLCredential
. IndeedNSURLCredential
is much simpler to use, as it allows you to store both username and password in the keychain in two lines of code.Your code would be something like that once the user is logged in:
Then, each time the app is launched, you can check whether your user was already logged in by searching for any credential in order to automatically log back your user (if need be):
You also need to clean the credential when the user wants to log out:
loginProtectionSpace
is created once for all. Please, note this sample code assumes there is only one credential in this space, which is usually the case unless you manage several accounts.Here is an example of how you would create a
NSURLProtectionSpace
:Cookies are indeed automatically stored for the lifetime of your application for any subsequent requests on a particular server. A good strategy would be to store the username and password in the keychain or in
NSUserDefaults
like this:You may want to use this in combination with
AFHTTPClient
to send your credentials along with every request in anAuthorization
HTTP header.