保持用户会话的正确方法

时间:2016-05-25 10:40:30

标签: ios objective-c

我正在开发一个使用外部API的应用程序,需要通过oauth2进行身份验证。在来自api的响应中,我获得了访问令牌,刷新令牌和令牌将过期的时间。一切都很好,直到时间到期。在发送请求之前,我检查访问令牌是否有效:

if ([[AppCredentials sharedCredentials]tokenIsValid]) {
    BackEnd *backendPUT = [[BackEnd alloc]init];
    [backendPUT setDelegate:self];
    [backendPUT updateMenuInDiary:menuDietyDoUpdate forDate:[[DziennikDietaModel sharedDziennikDietaModel]getwybranaDate] mealID:[menuDietyDoUpdate objectForKey:@"id"]];
    monitor = [[UICustomLoadingMonitor alloc]initWithDefaultOptionsInView:[self view]];
    [monitor start];
}else{
    [[AppCredentials sharedCredentials] getAppTokenFromRefreshedToken];
}

当getAppTokenFromRefreshedToken完成时,使用delegate调用方法userTokenDownloaded。 问题是:我怎样才能回到那些在if语句的第一部分无法执行的代码?一切都是异步的,这就是我遇到问题的原因。

在我的视图控制器中,有几种方法向api发送不同的请求,我需要区分哪一个需要再次调用。

对此有何正确的解决方法?关闭?

1 个答案:

答案 0 :(得分:0)

确定。解决了它与块:)在有人正在寻找答案,我是如何做到的:

 BackEnd *backEnd = [[BackEnd alloc]init];
 [backEnd setDelegate:self];
 if ([[AppCredentials sharedCredentials]tokenIsValid]) {
         NSLog(@"TOKEN VALID NO BLOCKS");
         [backEnd updateMenuInDiary:menuDietyDoUpdate];
 }else{
        NSLog(@"USING BLOCKS");
        [backEnd getAppTokenFromRefreshToken:refreshedToken withCompletionBlock:^{
            NSLog(@"ponowna proba z bloku");
            [backEnd updateMenuInDiary:menuDietyDoUpdate];
       }];
}

效果很好:)