在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令牌刷新票據,並發現很多陳舊的問題,但沒有一個提供可行的解決方案。