2013-07-28 7 views
0

Я делаю приложение, в котором вам необходимо войти в систему. Я использую JSON. До сих пор я мог отправлять запрос POST с именем пользователя и паролем, и я получаю токен назад (он отображается в консоли) .Когда я не вхожу в правильную комбинацию имени пользователя и пароля, я не получаю токен назад. Мне бы хотелось, чтобы перейти к следующему контроллеру представления, если я получу токен обратно Я думаю, что мне нужно использовать оператор if (я поставлю код для переключения контроллеров представления в него), но я не знаю, какие параметры мне нужны, чтобы проверить, не получил ли я токен.iOS Check for Token

Вот код, который я использую в файле реализации. Это метод, который запускается при нажатии кнопки:

@try { 

    if([[usernameTextField text] isEqualToString:@""] || [[passTextField text] isEqualToString:@""]) { 
     [self alertStatus:@"Please enter both Username and Password" :@"Login Failed!"]; 
    } else { 
     NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",[usernameTextField text],[passTextField text]]; 
     NSLog(@"PostData: %@",post); 

     NSURL *url=[NSURL URLWithString:@"https://beta.network360.com/tokens"]; 

     NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

     NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
     [request setURL:url]; 
     [request setHTTPMethod:@"POST"]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
     [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
     [request setHTTPBody:postData]; 


     NSError *error = [[NSError alloc] init]; 
     NSHTTPURLResponse *response = nil; 
     NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

     NSLog(@"Response code: %d", [response statusCode]); 
     if ([response statusCode] >=200 && [response statusCode] <300) 
     { 
      NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
      NSLog(@"Response ==> %@", responseData); 

      SBJsonParser *jsonParser = [SBJsonParser new]; 
      NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil]; 
      NSLog(@"%@",jsonData); 
      NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue]; 
      NSLog(@"%d",success); 
      if(success == 1) 
      { 
       NSLog(@"Login SUCCESS"); 
       [self alertStatus:@"Logged in Successfully." :@""]; 

      } else { 

       NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"]; 
       [self alertStatus:error_msg :@"Login Failed!"]; 
      } 

     } else { 
      if (error) NSLog(@"Error: %@", error); 
      [self alertStatus:@"Connection Failed" :@""]; 
     } 
    } 
} 
@catch (NSException * e) 
{ 
    NSLog(@"Exception: %@", e); 
    [self alertStatus:@"Login Failed." :@""]; 
     //[[PSearchViewController new] performSegueWithIdentifier:@"loginCancel" sender:self]; 
} 

Кроме того, вот что я получаю на выходе консоли, когда я ввел правильную комбинацию имени пользователя и пароля (BTW Я попытался изменить все содержимое, появившееся на консоли, которая была конфиденциальной, поэтому, если некоторые вещи не " t вполне соответствует, все должно быть хорошо. Я просто хотел показать, что я получаю фишку назад):

2013-07-28 13:23:21.607 Empyrean[28283:c07] PostData: [email protected]&password=password 
2013-07-28 13:23:22.300 Empyrean[28283:c07] Response code: 200 
2013-07-28 13:23:22.301 Empyrean[28283:c07] Response ==> {"token":"scFDzxSAVk2sxQBShEGS","user":{"id":300230,"username":"[email protected]","display_name":"FirstName LastName","unconfirmed_email":null,"email":"[email protected]","confirmation_email":"[email protected]","client_identifier":null,"client_id":138,"is_admin":false,"support_email":"[email protected]","application_name":"AppName","show_project_vintage_date":false,"is_anonymous":false,"is_active":true,"is_confirmed":true,"pending_reconfirmation":false,"can_resend_confirmation":false,"client_name":"Broker","show_advertisements":true,"header_logo":"/foo/headerlogo.gif","report_footer_logo":"/stuff/foo/footerlogo.png","authorized_features":["find_stuff","do_stuff","stuff_stuff","settings","menu","manage_stuff","measure_stuff","export_stuff"],"url":"https://www.website.com/stuff/numbersdsjkflds"}} 
2013-07-28 13:23:22.304 Empyrean[28283:c07] { 
    token = dlsfkasdfDfdsklfdDsa; 
    user =  { 
     "application_name" = "Application Name"; 
     "authorized_features" =   (
      "find_stuff", 
      "do_stuff", 
      "stuff_stuff", 
      settings, 
      menu, 
      "manage_stuff", 
      "measure_stuff", 
      "export_stuff" 
     ); 
     "can_resend_confirmation" = 0; 
     "client_id" = 138; 
     "client_identifier" = "<null>"; 
     "client_name" = Broker; 
     "confirmation_email" = "[email protected]"; 
     "display_name" = "FirstName LastName"; 
     email = "[email protected]"; 
     "url" = "https://www.website.com/stuff/numbersdsjkflds"; 
     "header_logo" = "/foo/headerlogo.gif"; 
     id = 300230; 
     "is_active" = 1; 
     "is_admin" = 0; 
     "is_anonymous" = 0; 
     "is_confirmed" = 1; 
     "pending_reconfirmation" = 0; 
     "report_footer_logo" = "/stuff/foo/footerlogo.png"; 
     "show_advertisements" = 1; 
     "show_project_vintage_date" = 0; 
     "support_email" = "[email protected]"; 
     "unconfirmed_email" = "<null>"; 
     username = "[email protected]"; 
    }; 
} 

ответ

0

NSDictionary *jsonData является словарем. Следовательно, вы можете видеть, существует ли ключ token.

if (jsonData[@"token"]) 
{ 
    // Token exists, so move on. 
    [self.navigationController pushViewController:nextController animated:YES]; 
} 
else 
{ 
    // Tell the user they messed it up. 
}