3 votes

RestKit traite le nom d'utilisateur et le mot de passe de manière étrange

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 :

  1. Connectez-vous avec les informations correctes (vous téléchargez alors toutes les données de l'application).
  2. 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)
  3. 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.

1voto

Aranir Points 808

Apparemment, Restkit stocke une sorte de cookie pour l'authentification. Dans mon cas, je pouvais me déconnecter et me reconnecter avec un mauvais mot de passe tant que le nom d'utilisateur restait le même.

Dans mon cas, je pourrais résoudre le problème avec :

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in cookieStorage.cookies)
{
    [cookieStorage deleteCookie:cookie];
}

Ce qui a permis de se débarrasser de tous les cookies stockés. J'espère que cela résoudra également votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X