4

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) {
    // ...
}];

当我发出请求connection:willSendRequestForAuthenticationChallenge:时,NSURLConnectionDelegate将调用方法(该方法在 中实现AFURLConnectionOperation)。

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

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

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

4

1 回答 1

0

我遇到了完全相同的问题,发现与 AFNetworking 的 AFHTTPRequestOperationManager 的方法shouldUseCredentialStorage存在连接,该方法默认为YES.
而且由于我没有找到清除注销凭据的方法,所以我现在所做的只是credentialStorage完全禁用这样的:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.shouldUseCredentialStorage = NO;

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

于 2014-07-01T11:34:11.850 回答