我在App Store中有一个应用程序,它使用地理围栏将更新发布到我们的本地API。迄今为止,这已经取得了巨大的成功。几个月前,我安装了Flurry,以便深入了解客户使用情况以及任何未处理的异常情况。我开始收到的是与我们用于验证用户ID的已保存令牌有关的一些错误。
此令牌是用户名和密码的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
}
答案 0 :(得分:1)
您使用的是第三方图书馆吗? “token”是一个非常常见的字符串,我会将其更改为其他内容。有些其他代码可能会使用令牌踩踏您的令牌。
答案 1 :(得分:0)
我不希望这个问题在那里徘徊,浪费任何人的时间和精力。在最近的一些测试之后,我不相信我的问题是用户默认值或保存的令牌。已经有答案了,所以我无法删除这个问题。所以我会在这里留下一个小答案并将其关闭。
我最终将所有登录凭据移动到iOS钥匙串。每次我需要API令牌时,我都会对电子邮件和密码进行查找和散列。它为每个API创建了更多的开销,但了解我的用户凭据安全可靠是值得的。我仍然有我的问题,但我认为我越来越接近它了。感谢任何看过我问题的人。