2015-09-23 3 views
-1

У меня есть сервер, написанный на 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 

Я не могу понять, что случилось с моим кодом и моей просьбой. Не мог бы кто-нибудь помочь мне? Спасибо за ваше время, я надеюсь, кто-то может помочь мне

Приветствия

+0

Можете ли вы опубликовать полную информацию о трассировке из приложения django? Вы можете просто получить его, отключив отладку и указав хотя бы один действительный адрес электронной почты для параметра «ADMINS», каждая ошибка будет отправлена ​​на этот адрес электронной почты, если вы не настроили регистраторы. – GwynBleidD

+0

Благодарим вас за ответ. Отключив отладку, ошибка изменилась с 500 на «GET/passapp/login/HTTP/1.1» 401 3389 », поэтому я не могу опубликовать полную трассировку. Я не понимаю, как ошибка могла быть изменена только отключением. путь, мои учетные данные верны, но я все еще получаю ошибку, и запрос GET должен быть POST ... – boh

+0

Ваше доменное имя должно быть указано внутри 'ALLOWED_HOSTS' в настройках, когда отладка отключена. – GwynBleidD

ответ

Смежные вопросы