RestKit奇怪地处理用户名和密码

时间:2012-06-07 02:41:51

标签: nsurlconnection restkit

我正在使用RestKit,基本上使用RKClient并执行get请求。我的系统使用用户名/密码/帐户来验证用户身份。用户名/密码只是httpbasic,帐户只是一个子域名。

我遇到的问题是,如果我执行以下操作:

  1. 使用正确的信息登录(然后下载该应用的所有数据)
  2. 重置数据(删除所有核心数据对象,并将共享RKClient的用户名和密码设置为空白)
  3. 输入错误的用户名/密码,但输入的帐号正确,然后下载数据就好像一切正​​确。
  4. 我在设置用户名和密码之前和之后放置了放置,我可以看到它被更改为不正确的数据。我将缓存设置为RKRequestCachePolicyNone(在共享客户端和RKRequest实例上)。

    返回的请求表明它没有从缓存中提取。当我尝试使用curl在终端中复制问题时,我得到正确的响应(我无法使用错误的用户名密码获取数据)。

    那么为什么RestKit会如何得到正确的反应呢?它正在击中服务器并获得200响应。

    示例代码:

    - (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];
    }
    

    更新

    我还注意到,如果我在首次登录时输入了错误的密码,那么它会以失败的形式返回。如果我然后更正密码,它将始终在那里失败。

1 个答案:

答案 0 :(得分:1)

显然,Restkit会存储某种cookie进行身份验证。 在我的情况下,只要用户名保持不变,我就可以注销并使用错误的密码重新登录。

在我的情况下,我可以用以下方法解决问题:

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

摆脱了所有存储的cookie。我希望这也能解决你的问题。