Hi again,

after much wailing and gnashing of teeth, I think I've figured it out.
The solution is adding a # to the end of the URL:
http://blog.springenwerk.com/2008/11/i-am-currently-building-iphone.html

I'm pretty sure this is a bug, though.

- Johannes

On Thu, Nov 20, 2008 at 3:38 PM, Johannes Fahrenkrug
<[EMAIL PROTECTED]> wrote:
> Hi,
>
> I'm working on a piece of code that connects to a RESTful webservice
> and authenticates via HTTP basic. This works great, I get the
> - (void)connection:(NSURLConnection *)connection
> didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge
> *)challenge
> message, provide my credentials and get a successful response from the
> server. So far so good.
>
> BUT...
> I want to be able to change the credentials while the app is running.
> But when after the first successful didReceiveAuthenticationChallenge
> call, my delegate never receives that message again.
> This is my code:
>
> - (void)connection:(NSURLConnection *)connection
> didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge
> *)challenge {
> #ifdef DEBUG
>        NSLog(@"got auth challange");
> #endif
>        if ([challenge previousFailureCount] == 0) {
>                [[challenge sender]  useCredential:[NSURLCredential
> credentialWithUser:[usernameTextField text]
> password:[passwordTextField text]
> persistence:NSURLCredentialPersistenceNone]
> forAuthenticationChallenge:challenge];
>        } else {
>                // this indicates that the connection failed because of bad 
> credentials
>                authFailed = YES;
>        [[challenge sender] cancelAuthenticationChallenge:challenge];
>    }
> }
>
> I've even tried setting persistence to
> NSURLCredentialPersistenceForSession and programmatically reset the
> stored NSURLCredentials before each request:
>
> // reset the credentials cache...
>                NSDictionary *credentialsDict = [[NSURLCredentialStorage
> sharedCredentialStorage] allCredentials];
>
>                if ([credentialsDict count] > 0) {
>                        // the credentialsDict has NSURLProtectionSpace objs 
> as keys and
> dicts of userName => NSURLCredential
>                        NSEnumerator *protectionSpaceEnumerator = 
> [credentialsDict keyEnumerator];
>                        id urlProtectionSpace;
>
>                        // iterate over all NSURLProtectionSpaces
>                        while (urlProtectionSpace = [protectionSpaceEnumerator 
> nextObject]) {
>                                NSEnumerator *userNameEnumerator = 
> [[credentialsDict
> objectForKey:urlProtectionSpace] keyEnumerator];
>                                id userName;
>
>                                // iterate over all usernames for this 
> protectionspace, which are
> the keys for the actual NSURLCredentials
>                                while (userName = [userNameEnumerator 
> nextObject]) {
>                                        NSURLCredential *cred = 
> [[credentialsDict
> objectForKey:urlProtectionSpace] objectForKey:userName];
>                                        NSLog(@"cred to be removed: %@", cred);
>                                        [[NSURLCredentialStorage 
> sharedCredentialStorage]
> removeCredential:cred forProtectionSpace:urlProtectionSpace];
>                                }
>                        }
>                }
>
>
> But that didn't help either.
>
> SO: my question is: how do I force an NSURLConnection to send my
> delegate the didReceiveAuthenticationChallenge message so I can change
> my credentials?
>
> Thanks!
>
> - Johannes
>
> --
> http://blog.springenwerk.com
>



-- 
http://blog.springenwerk.com
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to