Ign*_*ioC 10 ios oauth-2.0 afnetworking afnetworking-2
我正在为受OAuth2保护的服务器编写一个小型iOS客户端.
我想知道是否可以使用AFOAuth2Manager[here]自动刷新过期的令牌.
这个想法是当服务器用401响应时刷新客户端的逻辑,或者当刷新方法返回401时引发错误的逻辑应该是很常见的,所以可能它集成在某个库中.
Ign*_*ioC 14
我创建了一个子类 AFOAuth2Manager
在这个子类中,我重写了这个方法:
- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure {
return [self HTTPRequestOperationWithRequest:request
success:success
failure:failure
checkIfTokenIsExpired:YES];
}
Run Code Online (Sandbox Code Playgroud)
使用附加参数调用自定义方法:checkIfTokenIsExpired.这是为了避免无限循环所必需的.
这种方法的实现是向前的:如果我们不需要检查令牌就调用超类.
if (!checkIfTokenIsExpired) {
return [super HTTPRequestOperationWithRequest:request
success:success
failure:failure];
}
Run Code Online (Sandbox Code Playgroud)
否则我们使用自定义故障块执行请求
else {
return [super HTTPRequestOperationWithRequest:request
success:success
failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
if (operation.response.statusCode == ERROR_CODE_UNAUTHORIZED) { //1
[self reauthorizeWithSuccess: ^{ //2
NSURLRequest *req = [self.requestSerializer requestByAddingHeadersToRequest:request]; //3
AFHTTPRequestOperation *moperation = [self HTTPRequestOperationWithRequest:req //4
success:success
failure:failure
checkIfTokenIsExpired:NO];
[self.operationQueue addOperation:moperation]; //5
} failure: ^(NSError *error) {
failure(nil, error);
}];
}
else {
failure(operation, error); //6
}
}];
}
Run Code Online (Sandbox Code Playgroud)
http status code,如果401尝试自动重新授权.AFOAuthManager用于刷新令牌的私有mathod .requestByAddingHeadersToRequest:只复制上一个请求中的所有头字段.successBlock和failureBlock是相同的以前的请求.| 归档时间: |
|
| 查看次数: |
3321 次 |
| 最近记录: |