私は、ASIHTTPRequestを使用してNTLM認証を使用するWebサービスと対話するiPhoneアプリケーションで作業しています。資格情報はキーチェーンに保存する必要があります。それは正常にログインするが、私はアプリからの資格情報をクリアするログアウトボタンを持っていると思うし、私はそれを働かせることはできません。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];
しかし、それは動作しません。そのメソッド内のコードは、それらの引数がsaveCredentials:forHost:port:protocol:realm:に最初に渡されるのを見たとしても、それを削除できるように保存されたNSURLCredentialを検出しません。
また、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];
}
}
作品のその種、次回アプリはそれを立ち上げているので」もう一度ログインを求めるプロンプトが表示されます。しかし、アプリが引き続き実行されている場合、別のログインを促すメッセージは表示されません。
私も同様の問題に直面しています。解決策は見つかりましたか? –
いいえ、私はこれには良い答えが見つかりませんでした。 –