Отправка в API значений, отличных от хранящихся в NSUserDefaults - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть приложение в App Store, которое использует геозоны для публикации обновлений нашего локального API. На сегодняшний день это был огромный успех. Пару месяцев назад я установил Flurry, чтобы получить представление об использовании клиента и любых необработанных исключениях. Я начал возвращаться к ошибкам, относящимся к сохраненному токену, который мы используем для аутентификации идентификатора пользователя.

Этот токен является соленым хешем MD5 имени пользователя и пароля. Никаких проблем здесь, мы используем это для всего в приложении. Я храню его в NSUserDefaults и извлекаю перед каждым вызовом API. Когда мы начали сужать наш поиск виновника, это показывает, что мы отправляем токен, которого нет нигде на наших серверах. Когда пользователь отключает геозону, он автоматически обновляет свой статус, но в фоновом режиме происходит сбой очень небольшого процента, что вызывает некоторые опасения клиентов.

Извините за длинный прекурсор, к вопросу. Что заставило бы мое значение в NSUserDefaults загружаться в строку NSString по-разному от одного раза к другому? Я проверил логику, она будет обновлять меня 3 раза подряд, когда я приду на работу, но 4-го я получу сообщение об ошибке токена с сервера. Там нет рифмы или причины, почему это не удается. Наш сервер регистрирует эти неисправные токены, и мы не можем сопоставить их ни с чем.

Так что, если у кого-то есть понимание этого вопроса, я был бы очень признателен. Может ли это быть испорчено, когда я сохраняю его в NSString? Могут ли быть некоторые несоответствия с моим методом POST? Это может даже быть на нашем сервере, я не знаю. Я надеюсь, что все на SO могут протянуть руку и помочь мне получить новое понимание. Заранее спасибо.

//Loading the token... done this way for EVERY API call
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *token = [defaults objectForKey:@"token"];

Код взят из моего класса API

//My POST method for updating our API
NSString *requestData = [NSString stringWithFormat:@"?auth_token=%@", token];
NSData *myRequestData = [NSData dataWithBytes: [requestData UTF8String] length: [requestData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:[NSString  stringWithFormat:@"%@/api/user.json%@", webAddress, requestData]]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
NSData *jsonData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *payloadData = [json JSONValue];

if([[payloadData objectForKey:@"success"] boolValue]) {
   // if i get here, successful update
} else {
   // update unsuccessful, error message returned... bad token
}

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

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

0 голосов
/ 06 февраля 2012

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

Я переместил все учетные данные для входа в связку ключей iOS. Я солю и хеширую электронную почту и пароль каждый раз, когда мне нужен токен API. Это создает немного больше накладных расходов для каждого API, но знание того, что учетные данные моих пользователей безопасны и надежны, вероятно, того стоит. У меня все еще есть проблема, но я думаю, что все ближе к ее решению. Спасибо всем, кто посмотрел на мой вопрос.

...