【发布时间】:2014-02-18 07:14:34
【问题描述】:
我正在尝试为我们的网站构建一个 ios 应用程序。我们已经使用 oauth 2.0 实现了 api。现在,我在设置属性时遇到问题。我正在使用 afnetworking2.0 进行联网。这是我想要实现的目标:
我正在编写允许我检查访问令牌的有效性或使用刷新令牌获取另一个访问令牌的函数。我在一个头文件中声明了一个布尔属性,它告诉我我的访问令牌是否有效。在向网站发出任何请求之前,我首先发出请求以使用函数检查访问令牌的有效性。在这个函数中,我根据令牌是否有效来设置布尔属性的值。现在,问题是我在 afnetworking2.0 发布/获取请求方法的成功或失败块中设置了这个属性,并且由于某种原因,如果我打印出我在功能,我没有看到预期值。我尝试了使用 __block 局部变量的不同方法,然后在函数末尾将布尔属性设置为此局部变量,但仍然没有成功。所以,我有点失落。我要做的就是实现一种检查访问令牌是否有效的方法,以便我可以在向 Web 服务器发出真正的请求之前对其进行更新。有没有更好的方法来做到这一点?我计划采取的第二种方法是存储 access_token 的 expiry_date 并在发出请求之前检查时间是否已经过去。在这种情况下,我将一个额外的请求保存到 Web 服务器。我仅在当前时间超过到期时间时才提出续订请求。但是,我在这里面临的问题是在成功块中设置属性。这是我要实现的功能:
- (BOOL) isTokenValid:(NSString *)accessToken
{
__block BOOL tokenValid = NO;
if (accessToken != nil)
{
static NSString *const baseUrl = @"baseurl";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:[@"Bearer " stringByAppendingString:accessToken] forHTTPHeaderField:@"Authorization"];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[manager GET:baseUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
tokenValid = YES;
NSLog(@"Data: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
tokenValid = NO;
}];
}
else
{
tokenValid = NO;
}
self.tokenValid = tokenValid; // here I am setting the property, which I will be checking right after I call this function
return tokenValid;
}
如您所见,这是我正在尝试的方法之一。我没有设置“tokenValid”,而是尝试在块内设置“self.tokenValid”,但没有看到任何运气。那么,如何在块内正确设置属性?
谢谢
【问题讨论】:
标签: ios objective-c ios7 objective-c-blocks afnetworking-2