在iPhone应用程序上工作时,我使用Google Plus SDK(GPPSignIn)获取和刷新身份验证令牌。iOS使用刷新的身份验证令牌处理请求
这些标记持续1小时。当我使用过期令牌发出请求时,我正在使用的Web服务会返回特定的http响应代码,以便我知道我的令牌已过期。
在收到我的令牌已过期的响应后,我打电话刷新身份验证令牌。现在我想用新的令牌重新向Web服务发送请求。我想在我的服务器请求对象中完成这一切。
如果我自己编写了所有的作品,我可以只是提出令牌刷新的请求,内嵌Web服务器请求,当令牌请求完成时,我可以继续处理Web服务器请求。但是由于令牌工作是通过Google Plus SDK完成的,并且他们使用委托模型来传递完成身份验证请求,所以我不知道如何在刷新令牌之前将请求保存到Web服务。
目前我正在尝试一个“非常糟糕”的想法,如下所示,我尝试将我的请求放入一个新线程,然后将该线程休眠一段时间,此时它会唤醒我们希望新的令牌可用。但是必须有更好的方法!
if (error !=nil && error.code == NSURLErrorUserCancelledAuthentication) {
//special handling of 401, which may be a Google Auth token failure.
// if it is, then let's go get a new token.
User *client = [[User alloc] init];
if(client.email != nil && client.password != nil){
if (client.accountType == AuthTypeGoogle) {
NSLog(@"attempt to get a new token");
// request new token
[client silentGoogleAuthentication];
//repeat request
if (repeatableRequest) {
dispatch_async(repeatQueue, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"sleepytime");
[self assignCredentialstoRequest];
[self makeRequest:notificationName repeatableRequest:false];
});
}
}
}
}
任何指针,将不胜感激。我查看了许多iOS令牌刷新票据,并发现很多陈旧的问题,但没有一个提供可行的解决方案。