Ios AFNetworking 2.0:在上一个请求的30秒内未将凭据发送到身份验证

Ios AFNetworking 2.0:在上一个请求的30秒内未将凭据发送到身份验证,ios,authentication,afnetworking,afnetworking-2,afhttprequestoperation,Ios,Authentication,Afnetworking,Afnetworking 2,Afhttprequestoperation,我正在使用AFHTTPRequestOperationManager从我们的服务器获取一些数据。服务器使用基本身份验证 当用户登录到我们的应用程序时,我设置如下凭据: manager.credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession]; [manager GET:address parameter

我正在使用
AFHTTPRequestOperationManager
从我们的服务器获取一些数据。服务器使用基本身份验证

当用户登录到我们的应用程序时,我设置如下凭据:

manager.credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession];
[manager GET:address parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // ...
}];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.shouldUseCredentialStorage = NO;
然后我提出这样的要求:

manager.credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession];
[manager GET:address parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // ...
}];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.shouldUseCredentialStorage = NO;
当我发出请求时,将调用
nsurlconnectionelegate
connection:willSendRequestForAuthenticationChallenge:
(该方法在
AFURLConnectionOperation
中实现)

当用户退出应用程序并再次登录时,我会根据用户输入再次设置凭据。但是,如果在上一个成功请求的30秒内发生这种情况,则不会将凭据发送到身份验证(
连接:willSendRequestForAuthenticationChallenge:
未调用)。这意味着即使新凭据不正确,用户也可以注销然后登录,因为它们从未被检查过

如果我至少等待30秒,则似乎没有问题(即,检查凭据后,我得到一个401错误)


当用户注销时,我是否需要以某种方式清除凭据,还是我的做法完全错了?

我遇到了完全相同的问题,并发现与AFNetworking的AFHTTPRequestOperationManager的方法存在连接,该方法默认为
YES

由于我没有找到在注销时清除凭据的方法,我现在只需禁用
credentialStorage
,如下所示:

manager.credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession];
[manager GET:address parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // ...
}];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.shouldUseCredentialStorage = NO;

我不确定这是否是最好的解决方案,但对我有效。

我刚刚遇到了同样的问题,你同时找到了解决方案吗?