Я пытался выяснить, как сделать страницу входа в мое приложение. У меня есть URL, действительное имя пользователя, пароль. Мне сказали использовать базовый auth для этого.Basic Auth example
До сих пор я реализовал этот код
- (IBAction)loginClicked:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://site-url.com"];
NSString *loginString =(NSMutableString*)[NSString stringWithFormat:@"%@:%@",usernameTextField.text,passwordTextField.text];
NSData *encodedLoginData=[loginString dataUsingEncoding:NSASCIIStringEncoding];
NSString *authHeader=[NSString stringWithFormat:@"Basic %@", [encodedLoginData base64Encoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:3.0];
[request setValue:authHeader forHTTPHeaderField:@"Authorization"];
[request setHTTPMethod:@"POST"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
}
- (void) connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
// POW, here's the content of the webserver's response.
NSLog(@"Response -> %@",response);
int statusCode = [httpResponse statusCode];
NSLog(@"response code:%d",statusCode);
}
- (void)connection:(NSURLConnection *)connection willReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if ([challenge previousFailureCount] == 0) {
NSLog(@"received authentication challenge");
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:usernameTextField.text
password:passwordTextField.text
persistence:NSURLCredentialPersistenceForSession];
NSLog(@"credential created");
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
NSLog(@"responded to authentication challenge");
}
else {
NSLog(@"previous authentication failure");
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Connection success.");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Connection failure.");
, чтобы заставить его работать, но когда я использую мой сайт URL, он просто дает мне сообщение об успешном и статус код 200 и не вызывается метод делегата - willSendRequestForAuthenticationChallenge:
Когда я изменить URL на gmail.com Это дает следующий результат:
2013-08-06 12: 06: 08,674 CVReaderSGT [26544: A0B] получил вызов аутентификации 2013-08-06 12: 06: 08.674 CVReaderSGT [26544: a0b] Пользовательская строка: admin Дата: 2013-08-06 12: 06: 08.674 CVReaderSGT [26544: a0b] Строка пароля: пароль 2013-08-06 12: 06: 08.675 Создан CVReaderSGT [26544: a0b] учетные данные ->: admin 2013-08-06 12: 06: 08.675 CVReaderSGT [26544: a0b] ответил на запрос аутентификации 2013-08-06 12: 06: 09.025 CVReaderSGT [26544] : a0b] получен вызов аутентификации 2013-08-06 12: 06: 09.026 CVReaderSGT [26544: a0b] Имя пользователя: admin 2013-08-06 12: 06: 09.026 CVReaderSGT [26544: a0b] Строка пароля: пароль 2013 -08-06 12: 06: 09.026 Созданы учетные данные CVReaderSGT [26544: a0b] ->: admin 2013-08-06 12: 06: 09.026 CVReaderSGT [26544: a0b] ответил на вызов аутентификации 2013-08-06 12: 06: 10.069 CVReaderSGT [26544: a0b] получил запрос аутентификации 2013-08-06 12: 06: 10.069 CVReaderSGT [26544: a0b] Имя пользователя: admin 2013-08-06 12:06 : 10.069 CVReaderSGT [26544: a0b] Строка пароля: пароль 2013-08-06 12: 06: 10.069 Созданы учетные данные CVReaderSGT [26544: a0b] ->: admin 2013-08-06 12: 06: 10.070 CVReaderSGT [26544: a0b] ответили на вызов аутентификации 2013-08-06 12: 06: 10.457 CVReaderSGT [26544: a0b] Response -> {URL: https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1<mpl=default<mplcache=2} {код состояния: 200, заголовки { "Cache-Control" = "no-cache , no-store "; "Content-Type" = "text/html; charset = UTF-8"; Дата = "вт, 06 авг. 2013 17:06:09 GMT"; Expires = "Mon, 01-Jan-1990 00:00:00 GMT"; Pragma = "no-cache"; Сервер = GSE; «Set-Cookie» = «GAPS = 1: LoAnsovSVriBDm6iP1r7zuYy7bTCpQ: 3o2OJzkd7X87BrCH; Path = /; Expires = Thu, 06-Aug-2015 17:06:09 GMT; Secure; HttpOnly, GALX = S0GMqJp_fyQ; Path = /; Secure" ; «Строгий транспорт-Безопасность» = «max-age = 2592000; includeSubDomains»; «Передача-кодирование» = Идентичность; «X-Auto-Login» = «realm = com.google & args = service% 3Dmail% 26continue% 3Dhttps% 253A% 252F% 252Fmail.google.com% 252Fmail% 252F"; «X-Content-Type-Options» = nosniff; «X-Frame-Options» = Deny; «X-XSS-Protection» = «1; mode = block»; }} 2013-08-06 12: 06: 10.458 CVReaderSGT [26544: a0b] Код состояния -> 200 2013-08-06 12: 06: 11.243 CVReaderSGT [26544: a0b] Успех соединения.
Я не знаю, почему я получаю два разных выхода, когда меняю URL-адрес, и почему делегат метод willSendRequestForAuthenticationChallenge: не вызывается, когда я помещаю свой URL.
Here's what the output looks like when using my URL:
2013-08-06 12:29:06.007 CVReaderSGT[26583:a0b] Response -> <NSHTTPURLResponse: 0x8e20ac0> { URL: http://XYZ.com/ } { status code: 403, headers {
"Content-Length" = 1585;
"Content-Type" = "text/html";
Date = "Tue, 06 Aug 2013 17:29:04 GMT";
MicrosoftSharePointTeamServices = "12.0.0.6219";
Server = "Microsoft-IIS/6.0";
"X-Powered-By" = "ASP.NET";
} }
2013-08-06 12:29:06.007 CVReaderSGT[26583:a0b] Status code -> 403
2013-08-06 12:29:06.007 CVReaderSGT[26583:a0b] Connection success.
Я действительно хочу понять процесс и заставить его работать.
Может ли кто-нибудь указать примеры или предоставить правильную информацию. Благодарю.
Какой делегат методы 'NSURLConnection' вы реализуете? – ipinak
@iPinak willReceiveAuthenticationChallenge: –
Что вы имеете в виду, когда указываете свой URL? Что это за URL? Кроме того, что пытается достичь. Из того, что я вижу здесь, вы пытаетесь выполнить аутентификацию в gmail, не так ли? Что, видимо, работает очень хорошо. – ipinak