Oauth を iPad アプリケーションに実装するにはどうすればよいですか?
AFOAuth2Client は、oauth 2.0 でリフレッシュ トークン メカニズムをどのように管理しますか?
クラス内に実装する方法はありますか、それとも独自の方法で実装する必要がありますか? トークンの有効期限が切れているかどうかを確認する方法は?
Oauth を iPad アプリケーションに実装するにはどうすればよいですか?
AFOAuth2Client は、oauth 2.0 でリフレッシュ トークン メカニズムをどのように管理しますか?
クラス内に実装する方法はありますか、それとも独自の方法で実装する必要がありますか? トークンの有効期限が切れているかどうかを確認する方法は?
私がこれを解決した方法は、必要に応じてアクセストークンを更新するコードブロックですべてのリクエストをラップすることです。
成功ブロックと失敗ブロックのtypedefをいくつか追加します。
typedef void (^YFRailsSaasApiClientSuccess)(AFJSONRequestOperation *operation, id responseObject);
typedef void (^YFRailsSaasApiClientFailure)(AFJSONRequestOperation *operation, NSError *error);
次に、リクエストメソッドは次のとおりです。
- (void)getProductsWithSuccess:(YFRailsSaasApiClientSuccess)success failure:(YFRailsSaasApiClientFailure)failure {
NSLog(@"getProductsWithSuccess");
success = ^(AFJSONRequestOperation *operation, id responseObject) {
[self getPath:@"api/1/products"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"getProductsWithSuccess: success");
// TODO: handle response
if (success) {
success((AFJSONRequestOperation *)operation, responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"getProductsWithSuccess: failure");
if (failure) {
failure((AFJSONRequestOperation *)operation, error);
}
}];
};
[self refreshAccessTokenWithSuccess:success failure:failure];
}
また、トークンの有効期限をチェックし、必要に応じて更新する方法は次のとおりです。
- (void)refreshAccessTokenWithSuccess:(YFRailsSaasApiClientSuccess)success failure:(YFRailsSaasApiClientFailure)failure {
NSLog(@"refreshAccessTokenWithSuccess");
if (self.credential == nil) {
if (failure) {
NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
[errorDetail setValue:@"Failed to get credentials" forKey:NSLocalizedDescriptionKey];
NSError *error = [NSError errorWithDomain:@"world" code:200 userInfo:errorDetail];
failure(nil, error);
}
return;
}
if (!self.credential.isExpired) {
NSLog(@"refreshAccessTokenWithSuccess: credential has not expired");
if (success) {
success(nil, nil);
}
return;
}
NSLog(@"refreshAccessTokenWithSuccess: refreshing credential");
[self authenticateUsingOAuthWithPath:@"oauth/token"
refreshToken:self.credential.refreshToken
success:^(AFOAuthCredential *newCredential) {
NSLog(@"Successfully refreshed OAuth credentials %@", newCredential.accessToken);
self.credential = newCredential;
[AFOAuthCredential storeCredential:newCredential
withIdentifier:self.serviceProviderIdentifier];
if (success) {
success(nil, nil);
}
}
failure:^(NSError *error) {
NSLog(@"An error occurred refreshing credential: %@", error);
if (failure) {
failure(nil, error);
}
}];
}
完全なソースコードはGitHubにあります:https ://github.com/yellowfeather/rails-saas-ios 。