Если вы проходите аутентификацию на своем сервере через HTTP-аутентификацию (согласно вашему комментарию выше), я бы сделал это по-другому.Когда пользователь вводит свое имя пользователя / pwd, отправьте запрос на любую страницу (что-то облегченное), используя NSURLConnection
.Если имя пользователя / пароль неверны, вы можете обработать ошибки в методах NSURLConnectionDelegate
и запросить у пользователя новое имя пользователя / пароль.
Вы также можете сделать это с версией iOS 5 NSURLConnection
вместо iOS.методов делегата, но документы не очень хороши.
Когда этот первый запрос завершается успешно, загрузите веб-представление.
РЕДАКТИРОВАТЬ: добавлен пример использования NSURLConnection для проверки, если HTTPauth успешно
Хорошо, вот простой пример.Вы можете сделать это лучше, разрешив NSURLConnection
загрузить намеченный вами запрос и, если это удастся, загрузить данные ответа в webView
против инициации нового запроса.Прочтите документацию по системе загрузки URL, чтобы узнать больше о том, как использовать NSURLConnection
.
. В своем делегате webView
инициируйте NSURLConnection
с запросом к тому же домену, что и запрос webView
сучетные данные пользователя:
- (void)performHTTPAuthRequest
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@test.starsightings.com", username, password]]];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
// if the request succeeds, credentials must be good so load the webView
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// request completed successfully so username/password must be good
[self.webView loadRequest:theRequest];
}
// ignore the failure
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
// if we get an auth challenge, the credentials are bad so cancel the request and alert the user
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
[[challenge sender] cancelAuthenticationChallenge:challenge];
// alert user that username/pwd is invalid
}