我有一个定期到期的令牌。我正在使用AFNetworking 3.0
。
步骤:
考虑到后端可以更改令牌到期时间,我该怎么做?
答案 0 :(得分:0)
通常,您将拥有一个API客户端类,您的所有网络请求都会漏斗通过,以便您可以捕获401失败,在标题中解析它们过期的令牌消息(这样您就可以允许真正的401通过)并在重试原始请求之前刷新您的令牌。
您可以更进一步,使用会话管理器防止其他请求在令牌完全刷新之前发出,但您基本上只需要在请求返回时添加刷新逻辑并重试原始请求。
以下是我如何处理它的粗略概念。
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:newRequest completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (response) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSString *headerError = [httpResponse.allHeaderFields objectForKey:@"Www-Authenticate"];
if (headerError) {
if ([headerError rangeOfString:@"The access token expired"].location != NSNotFound) {
//refresh here
// exit to avoid calling completion handler
return;
}
} else {
if (httpResponse.statusCode == 401) {
// user does not have access
NSLog(@"Unauthorized Network Request");
}
}
}
if (completionHandler) {
completionHandler(response,responseObject,error);
}
}];
[dataTask resume];