Я пытался найти способ сброса учетных данных после того, как вы установили NSURLCredential с NSURLConnection, который использует NSURLCredentialPersistenceForSession, но я не смог найти работающее решение. Удаление NSURLCredential из NSURLCredentialStorage только удаляет его из хранилища, а не из кэша NSURLConnection. Я попытался отключить кеш, и он все еще держит его. Мне нужно, чтобы это был NSURLCredentialPersistenceForSession, так как я не хочу, чтобы он загружал большие данные, затем возвращал вам нужную аутентификацию сообщения, затем аутентифицировался с помощью NSURLConnection и затем повторно отправлял большие данные, я просто хочу один раз пройти аутентификацию и отправить большие данные один раз. У меня есть способ аутентификации перед отправкой больших данных путем проверки некоторых свойств, но это не позволяет мне выйти из системы или повторно запросить аутентификацию. Я пишу клиент WebDav просто для того, чтобы вы поняли, где я нахожусь, и причина, по которой мне нужно сбросить учетные данные, заключается в том, что у кого-то есть несколько учетных записей на сервере WebDav и он хочет войти в другую учетную запись. Я пытался заглянуть в печенье, чтобы увидеть, что-то там есть, но это не так. Я знаю, что это только для сеанса, что означает, что после выхода и повторного запуска приложения, вы можете войти в систему как другой пользователь. Но это может запутать некоторых людей. Я думал о написании своей собственной системы аутентификации, но я не знаю, сколько времени это займет.
Извините, если вышеприведенное сообщение слишком длинное, я просто хочу объяснить все подробно, чтобы кто-то мог попытаться помочь мне с правильным ответом, а не с, иди сюда, чтобы привести меня к чему-то, что я попробовал.
Спасибо за любую помощь,
Мистер Гекко.
Обновление: пример кода.
CFHTTPMessageRef message = [self httpMessageFromResponse:response];
authentication = CFHTTPAuthenticationCreateFromResponse(kCFAllocatorDefault, message);
CFHTTPMessageRef message = [self httpMessageFromRequest:request];
CFStreamError error;
CFHTTPMessageApplyCredentials(message, authentication, (CFStringRef)[credentials user], (CFStringRef)[credentials password], &error);
NSLog(@"%d", error.error); // Returns -1000
CFStringRef value = CFHTTPMessageCopyHeaderFieldValue(message, CFSTR("Authorization"));
NSLog(@"%@", (NSString *)value); // Returns NULL
if (value!=NULL)
CFRelease(value);
Обновление: код, который я пытался удалить из учетных данных.
- (void)resetCredentials {
NSURLCredentialStorage *store = [NSURLCredentialStorage sharedCredentialStorage];
NSDictionary *allCredentials = [store allCredentials];
NSArray *keys = [allCredentials allKeys];
for (int i=0; i<[keys count]; i++) {
NSURLProtectionSpace *protectionSpace = [keys objectAtIndex:i];
NSDictionary *userToCredentialMap = [store credentialsForProtectionSpace:protectionSpace];
NSArray *mapKeys = [userToCredentialMap allKeys];
for (int u=0; u<[mapKeys count]; u++) {
NSString *user = [mapKeys objectAtIndex:u];
NSURLCredential *credential = [userToCredentialMap objectForKey:user];
NSLog(@"%@", credential);
[store removeCredential:credential forProtectionSpace:protectionSpace];
}
}
}