首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ios中实现刷新令牌

如何在ios中实现刷新令牌
EN

Stack Overflow用户
提问于 2018-04-06 10:29:31
回答 1查看 2.2K关注 0票数 1

只有一些api调用需要令牌。当401发生时,将对每个调用采取刷新令牌调用( place.and ),令牌将刷新。当401发生时如何同步执行多个api

EN

回答 1

Stack Overflow用户

发布于 2018-04-06 11:01:13

这取决于您是如何设计流程的,但我做的问题与目标C中的类似

  • 在我的例子中调用类似的方法userProfileGETRequest
  • 在调用userProfileGETRequest之前,如果令牌过期,请检查日期(在您的情况下,可能是状态代码== 401)
  • 如果令牌未过期,只需使用最后一个令牌调用API (在我的例子中是userProfileAPI )。
  • 如果令牌过期,则调用Refresh令牌,并成功和失败地回调
  • 如果成功刷新令牌,则使用更新的刷新令牌调用userProfileAPI API .。
    • ( userProfileGETRequest:(NSDictionary *)headerParams urlQuery:(NSString*)操作参数:(NSDictionary*)params docOpenPassword:(NSString*)密码docOpenOtp:(NSString*)otp onComplete:(void (^)(id json,id code,id url))successBlock onError:(void (^)(id (^),id code,id url))errorBlock {if ([SingletonSDK sharedInstance isTokenExpired:NSDate date date]) {[自引用action:nil:(id json,id code,id url)]{id代码){ [SingletonSDK sharedInstance handleLoginResponseObject:json];自用户userProfileAPI:headerParams urlQuery:action参数:params onComplete:^(id json,id代码,id url) { successBlock(json,code,url);} onError:^(id错误,id代码,id url) {errorBlock(错误,代码,url);};}{ [SingletonSDK sharedInstance hideProgessHud];返回;}}{ successBlock(json,code,url) {successBlock( json,code,url){successBlock(json,code,url);} onError:^(id错误,id代码,id url) {errorBlock(错误,代码,url);};}

//userProfileAPI方法

代码语言:javascript
复制
+ (void) userProfileAPI:(NSDictionary *)headerParams urlQuery: (NSString*)action parameters:(NSDictionary*)params 
                                         onComplete:(void (^)(id json, id code, id url))successBlock
                                            onError:(void (^)(id error, id code, id url))errorBlock
{

NSString *authorizationValue = [self setAuthorizationValue:action];
NSString *language = [self editedLanguageNameAsApiRequired];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

//set headers values
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager.requestSerializer setValue:language forHTTPHeaderField:@"Accept-Language"];
[manager.requestSerializer setValue:authorizationValue forHTTPHeaderField:@"authorization"];

[manager GET:action parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"getRequest response success");
    NSString *url = [[[operation response] URL] absoluteString];
    NSInteger statusCode = [operation.response statusCode];
    NSNumber *statusObject = [NSNumber numberWithInteger:statusCode];

    successBlock(responseObject, statusObject, url);
}
     failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {
     NSString *url = [[[operation response] URL] absoluteString];
     NSInteger statusCode = [operation.response statusCode];
     NSNumber *statusObject = [NSNumber numberWithInteger:statusCode];
     if ([self takeDesiredActionIfAccessTokenExpired:statusCode]) {
         return ;
     }
     id responseObject = operation.responseData;
     id json = nil;
     id errorMessage = nil;

     if ([statusObject integerValue] == 404) {
         errorMessage = [[SingletonSDK sharedInstance] getStringValueFromLanguageKey: COMMON_ERROR_SHARED_PREFERENCES];//NSLocalizedString(COMMON_ERROR_RESOURCE_NOT_FOUND, nil);
     } else {
         if (responseObject) {

             json = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];
             errorMessage = [(NSDictionary*)json objectForKey:@"Message"];

         }else{

             json = [error.userInfo objectForKey:NSLocalizedDescriptionKey];
             errorMessage = json;

         }
     }


     if(![errorMessage isKindOfClass:[NSString class]]){
         errorMessage = [[SingletonSDK sharedInstance] getStringValueFromLanguageKey: COMMON_ERROR_MSG] ; //NSLocalizedString(COMMON_ERROR_MSG, nil);
     }

 }];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49690757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档