2015-08-17 4 views
1

Я отправляю данные между приложениями iOS и веб-сервером с помощью системы токена аутентификации. Токен был сгенерирован с помощью API входа в систему с JWT и затем локально сохранен на устройстве. Когда я использую его позже в запросе загрузки данных я получаю -1011 ошибку с кодом состояния 401. Вот мой код:AFNetworking и auth token Код ошибки -1011

NSURL *baseURL = [NSURL URLWithString:kBaseURLString]; 
    NSDictionary *parameters = @{@"token": authtoken}; 

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; 
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

    [manager POST:@"load_data.php" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { 
     [self doSomeStuff:responseObject]; 
    } failure:^(NSURLSessionDataTask *task, NSError *error) { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Unable to load data" 
                  message:[error localizedDescription] 
                  delegate:nil 
                cancelButtonTitle:@"Ok" 
                otherButtonTitles:nil]; 
     [alertView show]; 
    }]; 

Если я проверить мой PHP API с завитком и тот же токен аутентификации это работает Что ж. Но с симулятором iOS я получаю эту ошибку:

ERROR: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unauthorized (401)" UserInfo=0x79f848f0 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7ad59d90> { URL: http://localhost:8888/load_data.php } { status code: 401, headers { 
    Connection = "Keep-Alive"; 
    "Content-Length" = 12; 
    "Content-Type" = "text/html;charset=UTF-8"; 
    Date = "Mon, 17 Aug 2015 16:03:44 GMT"; 
    "Keep-Alive" = "timeout=5, max=100"; 
    Server = "Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8za DAV/2 mod_perl/2.0.8 Perl/v5.20.0"; 
    "X-Powered-By" = "PHP/5.6.2"; 
} }, NSErrorFailingURLKey=http://localhost:8888/load_data.php, NSLocalizedDescription=Request failed: unauthorized (401), com.alamofire.serialization.response.error.data=<556e6175 74686f72 697a6564>} 

Я получаю ту же ошибку, используя метод GET. Но когда я копирую/вставляю URL-адрес из сообщения об ошибке консоли в мой браузер, он работает как шарм. Я не понимаю, почему запрос AFNetworking не работает на устройстве.

ответ

0

Вы пробовали настроить заголовок авторизации с помощью setValue:forHTTPHeaderField: запроса сериализатора?

/** 
Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. 

@param field The HTTP header to set a default value for 
@param value The value set as default for the specified header, or `nil` 
*/ 
- (void)setValue:(NSString *)value 
forHTTPHeaderField:(NSString *)field; 

Примером этого написано ниже, но каждый сервер может определить, как маркеры отформатирован в заголовках авторизации. Если вам нужно что-то другое, вы всегда можете установить это значение заголовка самостоятельно.

[requestSerializer setValue:[NSString stringWithFormat:@"token %@", yourToken] forHTTPHeaderField:@"Authorization"]; 
+0

Да, спасибо, он работает с заголовком авторизации. Однако основная проблема связана с требованием структуры данных маркера в моем PHP-коде. Значок начал действовать 10 секунд после выдачи. Я попытался использовать его до этого времени, поэтому я установил notbefore заявку на 0. – romain64