J'utilise RestKit de manière assez basique avec RKClient
et faire un get
demande. Mon système utilise le nom d'utilisateur/mot de passe/compte pour authentifier l'utilisateur. C'est juste httpbasic pour nom d'utilisateur/mot de passe et le compte est juste un sous-domaine.
Le problème que j'ai est que si je fais ce qui suit :
- Connectez-vous avec les informations correctes (vous téléchargez alors toutes les données de l'application).
- Réinitialiser les données (ceci supprime tous mes objets de données de base et je mets également le nom d'utilisateur et le mot de passe du RKClient partagé à blanc)
- Si vous entrez un nom d'utilisateur et un mot de passe erronés, mais le compte correct, les données seront téléchargées comme si elles étaient correctes.
J'ai mis un put avant et après la définition du nom d'utilisateur et du mot de passe et je peux voir qu'ils sont modifiés par des données incorrectes. Et j'ai réglé la mise en cache sur RKRequestCachePolicyNone
(à la fois sur le client partagé et sur l'instance RKRequest).
La requête retournée dit qu'elle n'a pas été tirée du cache. Et lorsque j'essaie de reproduire le problème dans le terminal en utilisant curl, j'obtiens la réponse correcte (que je ne peux pas obtenir les données avec le mauvais nom d'utilisateur et mot de passe).
Alors pourquoi/comment RestKit pourrait-il obtenir la réponse appropriée en retour ? Il frappe le serveur et reçoit une réponse 200.
Exemple de code :
- (void)startDownload {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"username and password before (%@,%@)",[RKClient sharedClient].username,[RKClient sharedClient].password);
[RKClient sharedClient].username = self.login;
[RKClient sharedClient].password = self.password;
NSLog(@"username and password after (%@,%@)",[RKClient sharedClient].username,[RKClient sharedClient].password);
NSString *base = [NSString stringWithFormat:@"http://%@.%@api",self.accountName,[defaults stringForKey:@"myURL"]];
[[RKClient sharedClient] setBaseURL:base];
[[RKClient sharedClient] setAuthenticationType:RKRequestAuthenticationTypeHTTPBasic];
[[RKClient sharedClient] setCachePolicy:RKRequestCachePolicyNone];
RKRequest *request = [[RKClient sharedClient] get:@"/verify.json" delegate:self];
[request setCachePolicy:RKRequestCachePolicyNone];
}
Mise à jour
J'ai également remarqué que si je saisis un mauvais mot de passe lors de la première connexion, le résultat est un échec. Si je corrige ensuite le mot de passe, l'échec est toujours au rendez-vous.