При использовании NSURLCredential
вам не нужно беспокоиться о NSUserDefaults или любой оболочке связки ключей. Действительно NSURLCredential
гораздо проще в использовании, так как он позволяет вам хранить как имя пользователя, так и пароль в цепочке ключей в двух строках кода.
Ваш код будет что-то подобное, когда пользователь вошел в систему:
NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
Затем, каждый раз, когда приложение запускается, вы можете проверить, был ли ваш пользователь уже вошел в систему с помощью функции поиска для любого верительных в для того, чтобы автоматически войти обратно вашего пользователя (если необходимо):
NSURLCredential *credential;
NSDictionary *credentials;
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace];
credential = [credentials.objectEnumerator nextObject];
NSLog(@"User %@ already connected with password %@", credential.user, credential.password);
Кроме того, необходимо очистить верительных, когда пользователь хочет выйти:
NSURLCredential *credential;
NSDictionary *credentials;
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace];
credential = [credentials.objectEnumerator nextObject];
[[NSURLCredentialStorage sharedCredentialStorage] removeCredential:credential forProtectionSpace:self.loginProtectionSpace];
loginProtectionSpace
создано один раз для всех. Пожалуйста, обратите внимание, что этот пример кода предполагает, что в этом пространстве есть только один учетный код, что обычно имеет место, если вы не управляете несколькими учетными записями.
Вот пример того, как вы бы создать NSURLProtectionSpace
:
NSURL *url = [NSURL URLWithString:@"http://www.example.com"];
self.loginProtectionSpace = [[NSURLProtectionSpace alloc] initWithHost:url.host
port:[url.port integerValue]
protocol:url.scheme
realm:nil
authenticationMethod:NSURLAuthenticationMethodHTTPDigest];
Спасибо за ответ, да это то, что мне делать, чтобы сохранить старые полномочия. То, что я хотел бы избежать, это начальный POST для входа в систему при каждом перезапуске приложения, мне просто интересно, можно ли продлить жизнь печенья, обрабатываемого AFNetworking. –
На самом деле, пожалуйста, не храните имена пользователей и пароли в NSUserDefaults. Вместо этого используйте брелок. Apple распространяет KeychainWrapper, который делает в основном одно и то же, но более надежно. – eddieroger