У меня действительно странная проблема, и я надеюсь, что кто-нибудь поможет мне понять, в чем проблема, с которой я столкнулся три дня назад.
Проще говоря, я делаю NSMutableRequest для простой конечной точки, куда я отправляю (используя POST) json, и я должен получить ответ 0 или 1.
Код работает при первом запуске приложения на устройстве, но почему-то больше не работает в следующий раз.
Чтобы объяснить себя лучше, если я удаляю и переустанавливаю приложение каждый раз, я получаю правильный ответ, но если я запускаю код дважды во второй раз, я получаю что-то вроде [Ошибка проверки CSRF] из конечной точки. Эта ошибка означает, что я отправляю неверный формат (или отправляю что-то странное).
Мой вопрос: как это возможно? Возможно ли, что я отправляю что-то еще?
Конечная точка работает правильно, потому что с версией Android у меня нет проблем ...
Код следующий, надеюсь, кто-нибудь объяснит мне, что происходит под капотом и как мне удается решить эту проблему.
NSString *mail = [profile valueForKey:@"email"];
NSString *provider = [profile valueForKey:@"provider"];
// making a GET request to endpoint
NSString *baseUrl = ENDPOINT_URL;
NSString *targetUrl = [NSString stringWithFormat:@"%@", baseUrl];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSString *body = [NSString stringWithFormat:@"{\"mail\":\"%@\", \"provider\":\"%@\"}",mail,provider];
NSData *postData=[body dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];
[request setURL:[NSURL URLWithString:targetUrl]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
^(NSData * _Nullable data,
NSURLResponse * _Nullable response,
NSError * _Nullable error) {
if (data){
NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Data received: %@", myString);
if ([myString isEqualToString:@"[\"CSRF validation failed\"]"]){
NSLog(@"ENDPOINT ERROR");
dispatch_async(dispatch_get_main_queue(), ^{
[(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});
} else {
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"Data received: %@", json);
NSNumber *value = [NSNumber numberWithInt:[[json objectForKey:@"profile_exists"] intValue]];
if ([value intValue] == 1){
//Profile exists.
NSLog(@"Profile exists.");
[self silentLogin:profile];
} else if ([value intValue] == 0) {
//Profile does not exists.
NSLog(@"Profile does not exist.");
[self silentRegistration:profile];
}
else {
//Error.
NSLog(@"Error in ENDPOINT VALUE");
dispatch_async(dispatch_get_main_queue(), ^{
[(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});
}
NSLog(@"%@",json);
}
} else {
NSLog(@"No Data received");
dispatch_async(dispatch_get_main_queue(), ^{
[(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});
}
}] resume];