AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证
Posted
技术标签:
【中文标题】AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证【英文标题】:AFNetworking 2.0: credentials not sent to authentication within 30 seconds of previous request 【发布时间】:2014-06-18 12:19:23 【问题描述】:我正在使用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)
// ...
];
当我发出请求时,NSURLConnectionDelegate
的方法 connection:willSendRequestForAuthenticationChallenge:
被调用(该方法在 AFURLConnectionOperation
中实现)。
当用户退出应用程序并再次登录时,我再次从用户输入设置凭据。但是,如果这发生在上一个成功请求的 30 秒内,则不会将凭据发送到身份验证(不会调用connection:willSendRequestForAuthenticationChallenge:
)。这意味着即使新凭据不正确,用户也可以注销然后显然登录,因为它们从未被检查过。
如果我等待至少 30 秒,则似乎没有问题(即检查凭据并收到 401 错误)。
当用户退出时我是否需要以某种方式清除凭据,还是我做错了?
【问题讨论】:
我刚刚遇到了同样的问题,请问您在此期间找到了解决方案吗? 【参考方案1】:我遇到了完全相同的问题,发现与 AFNetworking 的 AFHTTPRequestOperationManager 的方法 shouldUseCredentialStorage 存在连接,该方法默认为 YES
。
由于我没有找到在注销时清除凭据的方法,所以我现在所做的只是完全禁用 credentialStorage
,如下所示:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.shouldUseCredentialStorage = NO;
不确定这是否是最好的解决方案,但对我有用。
【讨论】:
以上是关于AFNetworking 2.0:凭据未在前一次请求的 30 秒内发送到身份验证的主要内容,如果未能解决你的问题,请参考以下文章
带有凭据的 AFNetworking 上传任务(HTTP 基本身份验证)