У меня есть сервер, написанный на Django, и я хочу войти в систему из своего приложения iOS. Я пытался отладить этот код более недели, но я могу выяснить, в чем проблема. Я пытаюсь войти на свой сервер с веб-страницы, и он работает без ошибок. Поэтому я полагаю, что сервер работает правильно. Поэтому я думаю, что проблема должна быть в моем запросе iOS.Вход в систему IOS с сервером Django
У меня есть ViewController, который является NSURLConnectionDataConnectionDelegate и это моя функция Войти
- (IBAction)Login:(id)sender{
if ([self validateData]) {
NSURL *URL = [NSURL URLWithString:@"http://127.0.0.1:8000/passapp/login"];
// Django requires csrf middleware token to work
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://127.0.0.1:8000/passapp/login"]];
NSLog(@"cookie csrf %@ /n", [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]);
NSHTTPCookie *csrfCookie;
NSLog(@"lunghezza [email protected]%lu", (unsigned long)[[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] count]);
for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
if ([cookie.name isEqualToString:@"csrftoken"]) {
csrfCookie = cookie;
NSLog(@"CSRF %@ ", csrfCookie.value);
}
}
// Setting post request
NSString *post = [[NSString alloc] initWithFormat:@"username=%@;password=%@;csrfmiddlewaretoken=%@;", [_username text], [_password text], csrfCookie.value];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length] ];
NSLog(@"post data : %@ /n" , post);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:URL]]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request addValue:csrfCookie.value forHTTPHeaderField:@"X-CSRFToken"];
[request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
request.HTTPMethod = @"POST";
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"pupu");
if (!error) {
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
NSLog(@"response: %@",httpResp);
if (httpResp.statusCode == 200) {
// handle the response here
}
}
else{
NSLog(@"Errore :%@", error);
}
NSLog(@"pupu");
}
];
[task resume];
}
}
Это моя ошибка на терминале:
[23/Sep/2015 10:28:56]"POST /passapp/login HTTP/1.1" 500 60018
Я не могу понять, что случилось с моим кодом и моей просьбой. Не мог бы кто-нибудь помочь мне? Спасибо за ваше время, я надеюсь, кто-то может помочь мне
Приветствия
Можете ли вы опубликовать полную информацию о трассировке из приложения django? Вы можете просто получить его, отключив отладку и указав хотя бы один действительный адрес электронной почты для параметра «ADMINS», каждая ошибка будет отправлена на этот адрес электронной почты, если вы не настроили регистраторы. – GwynBleidD
Благодарим вас за ответ. Отключив отладку, ошибка изменилась с 500 на «GET/passapp/login/HTTP/1.1» 401 3389 », поэтому я не могу опубликовать полную трассировку. Я не понимаю, как ошибка могла быть изменена только отключением. путь, мои учетные данные верны, но я все еще получаю ошибку, и запрос GET должен быть POST ... – boh
Ваше доменное имя должно быть указано внутри 'ALLOWED_HOSTS' в настройках, когда отладка отключена. – GwynBleidD