Я работаю над приложением iPhone, которое использует ASIHTTPRequest для взаимодействия с веб-службой с использованием проверки подлинности NTLM. И учетные данные должны храниться в цепочке ключей. Он регистрируется в порядке, но я бы хотел, чтобы кнопка выхода из системы удаляла учетные данные из приложения, и я не могу заставить это работать.Удаление учетных данных из ASIHTTPRequest
После того, как я нажму кнопку выхода, я ожидаю, что, когда я вернусь к представлению, которое запрашивает сервер, мне будет предложено снова войти в систему. Однако этого не происходит, и вызов на сервер все еще аутентифицируется.
код, который делает запрос выглядит следующим образом:
NSString *urlString = [NSString stringWithFormat:@"http://myserver.mydomain.com/myapp/items/%@", itemGroupId];
NSURL *url = [NSURL URLWithString:urlString];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setUseKeychainPersistence:YES];
[request setShouldPresentAuthenticationDialog:YES];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"content-type" value:@"application/json;charset=utf-8"];
[request addRequestHeader:@"content-length" value:@"0"];
[request setDelegate:self];
[request startAsynchronous];
Для выхода из системы, я попытался назвать:
[ASIHTTPRequest removeCredentialsForHost:@"myserver.mydomain.com" port:0 protocol:@"http" realm:nil];
Но это не работает. Код внутри этого метода не находит NSURLCredential, который был сохранен, так что он может удалить его, хотя эти аргументы - это то, что я видел, переданы в saveCredentials: forHost: port: protocol: realm: в первую очередь.
Я также пробовал вызов clearSession, и я попытался отключить сохранение сеанса вообще при создании запроса с помощью setUseSessionPersistence, но не повезло.
Я также попытался использовать код, основанный на this example, что петли через все учетные данные в брелка в приложениях и удаляет их все:
NSURLCredentialStorage *store = [NSURLCredentialStorage sharedCredentialStorage];
for (NSURLProtectionSpace *space in [store allCredentials]) {
NSDictionary *userCredentialMap = [store credentialsForProtectionSpace:space];
for (NSString *user in userCredentialMap) {
NSURLCredential *credential = [userCredentialMap objectForKey:user];
[store removeCredential:credential forProtectionSpace:space];
}
}
такого рода работы, потому что в следующий раз, когда приложение запускается его» ll снова введите логин. Но при запуске приложения он не запрашивает другой логин.
Я также сталкиваюсь с аналогичной проблемой. Вы нашли решение? –
Нет, я так и не нашел хорошего ответа. –