вызов аутентификации iphone uiwebview продолжает срабатывать при входе в систему - PullRequest
0 голосов
/ 15 мая 2011

Я недавно внедрил вход в систему аутентификации через iPhone UIWebView.у меня это работает до такой степени, что меня оспаривают, затем я представляю предупреждение с текстовыми полями, а затем отправляю данные на сайт, который нуждается в аутентификации.

Я еще не пытался использовать это ни для чего другогокроме моего роутера netgear.Но моя проблема в том, что когда я перемещаюсь по настройкам маршрутизатора, вызывается проблема аутентификации, таким образом, представляя предупреждение, даже если пользователь вошел в систему.

ниже приведен код, который я использую, любой советбудем благодарны

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"Did start loading: %@ auth:%d", [[request URL] absoluteString], _authed);
myRequest=[request copy];

if (_authed) {
    NSLog(@"_authed");
    _authed = NO;
    // pretty sure i'm leaking here, leave me alone... i just happen to leak sometimes 
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
    return YES;
}
[[NSURLConnection alloc] initWithRequest:request delegate:self];
return YES;}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
NSLog(@"protection space %@", protectionSpace.authenticationMethod);
//if(![protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodDefault]){
return NO;
//}
//else{
//  return YES;
//}

//[protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] || [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic];}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;{NSLog(@"received response via nsurlconnection %@", connection);

NSLog(@"got auth challange %@", challenge);
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;
/*NSString *aarrgghh=[NSString stringWithFormat:@"%@",connection];
NSString *searchForMe = @"login";
NSLog (@"arrgghhh %@",aarrgghh);
NSRange range = [aarrgghh rangeOfString:searchForMe];*/


if ([challenge previousFailureCount] <=1) {

    //present alert with text fields for credentials
} else {
    [[challenge sender] cancelAuthenticationChallenge:challenge]; 
}}

-(void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
NSLog(@"Challenge cancelled");}

// `- (void) соединение: (NSURLConnection *) соединение didReceiveData: (NSData *) data {NSLog (@" Received Data ");}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;{
    NSLog(@"received response via nsurlconnection %@", response);

    // THIS IS WHERE YOU SET MAKE THE NEW REQUEST TO UIWebView, which will use the new saved auth info 
    if(_authed){
    //NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:self.webView.request.URL.absoluteString]];

    [webView loadRequest:myRequest];
}
}

`

1 Ответ

0 голосов
/ 15 мая 2011

Может быть проще сделать это, но это то, что сработало для меня.

Во-первых, когда shouldStartLoadWithRequest возвращает YES, это говорит UIWebView создать NSURLConnection s и запустить их для вас. Поскольку вы не можете назначить делегата этому соединению, это не сработает. Если вы хотите обработать аутентификацию через NSURLConnectionDelegate, то shouldStartLoadWithRequest всегда должен возвращать NO для этого UIWebView.

Так что вам нужно обработать соединение самостоятельно. Запустите NSURLConnection с запросом и используйте остальные методы делегата NSURLConnection для обработки загрузки (например, отслеживайте тип MIME и создайте NSMutableData)

Наконец, когда вы доберетесь до connectionDidFinishLoading, вы можете позвонить UIWebView 'loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL с NSData вашим загруженным соединением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...