RestKit在处理用户名和密码时存在问题

3

我正在使用RKClient和进行get请求的RestKit。我的系统使用用户名/密码/账户来验证用户身份。仅使用httpbasic进行用户名/密码验证,而账户只是子域。

我的问题是,如果我按照以下步骤操作:

  1. 使用正确的信息登录(然后下载应用程序的所有数据)
  2. 重置数据(这将删除所有我的核心数据对象,并且我还将共享RKClient的用户名和密码设置为空白)
  3. 输入错误的用户名/密码,但是正确的账户,然后它会下载数据,就像一切都是正确的一样。

我在设置用户名和密码之前和之后添加了put,并且我可以看到它被更改为不正确的数据。而且我已经将缓存设置为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];
}

更新

我注意到,如果我在第一次登录时输入错误的密码并返回失败,如果我之后更正了密码,那么它将始终失败。


你可以尝试重新启动应用程序并在第一次尝试时输入错误的密码,看看会发生什么。如果你正在使用模拟器,也可以尝试重置整个模拟器,然后再次部署你的应用程序。 - TeaCupApp
如果用户名和密码在第一次尝试时错误,则它可以正常工作。我正在尝试弄清楚为什么这种边缘情况不能正常工作。 - RyanJM
请你能否发布你的RestKit/Network日志?我很好奇在这两种情况下(你的第一步和第三步),RestKit是否收到了身份验证挑战。 - mja
1个回答

1

显然,Restkit存储某种认证cookie。在我的情况下,只要用户名不变,我可以使用错误的密码退出登录并重新登录。

在我的情况下,我可以通过以下方式解决问题:

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

这将清除所有存储的 cookie。我希望这也能解决你的问题。


我曾经遇到过同样的问题,而这个小技巧确实有效。我很好奇是否有人发现RestKit缓存了什么使得这种情况成为可能。 - Jason Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接