Как отобразить проблему аутентификации в UIWebView?

Чтобы получить http://example.com/test , связав http://example.com/test.php , используйте:

RewriteEngine on
RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L] 

36
задан MPelletier 8 December 2011 в 02:35
поделиться

2 ответа

На самом деле это очень просто ... Я уверен, что вы можете просто показать UIAlertView, когда отображается делегат проверки подлинности (или до загрузки URL-адреса, если вы точно знаете, что URL-адрес, который вы нажимаете, будет запрашивать авторизация информации для входа). В любом случае, уловка состоит в том, чтобы создать собственное NSURLConnection , и я использую некоторую логику, чтобы сохранить, использовался ли делегат аутентификации.

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

    if (!_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 NO;
    }

    return YES;
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
{
    NSLog(@"got auth challange");

    if ([challenge previousFailureCount] == 0) {
        _authed = YES;
        /* SET YOUR credentials, i'm just hard coding them in, tweak as necessary */
        [[challenge sender] useCredential:[NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistencePermanent] forAuthenticationChallenge:challenge];
    } else {
        [[challenge sender] cancelAuthenticationChallenge:challenge];
    }
}

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

    /** THIS IS WHERE YOU SET MAKE THE NEW REQUEST TO UIWebView, which will use the new saved auth info **/

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:]];

    [_webView loadRequest:urlRequest];
}

- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection;
{
    return NO;
}
36
ответ дан 27 November 2019 в 04:56
поделиться

как вы знаете, UIWebView не предоставляет возможности связи с сервером. Я решил эту проблему следующим образом: в методе делегата должен былСтартЛоадЗадатьЗапрос UIWebView я инициирую очередное соединение с NSURLConnection, а уже в методе делегата NSURLConnection сделалReceiveAuthenticationChallenge обработал сгенерированный с сервера сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сгенерированный сенерик. А в методе didReceiveResponse (если вызов пришел), то снова в том же UIWebView загрузите тот же URL (вызов уже обработан:). Не забудьте отменить соединение в didReceiveResponse, иначе трафик удвоится.

.
4
ответ дан 27 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: