AFOAuth2Client y actualización de token

¿Cómo implementar la aplicación Oauth en iPad?

¿Cómo gestiona AFOAuth2Client el mecanismo de token de actualización en oauth 2.0?

¿Hay algún método para implementarlo dentro de la class o tenemos que implementarlo a nuestra manera? ¿Cómo comprobar que el token caduque o no?

La forma en que he resuelto esto es envolver todas mis requestes con un bloque de código que actualizará el token de acceso si es necesario, por ejemplo

Agregue algunos typedefs para bloques de éxito y falla:

typedef void (^YFRailsSaasApiClientSuccess)(AFJSONRequestOperation *operation, id responseObject); typedef void (^YFRailsSaasApiClientFailure)(AFJSONRequestOperation *operation, NSError *error); 

Entonces, el método de request es:

 - (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]; } 

Y el método que verifica la expiración de token y lo actualiza si es necesario es:

 - (void)refreshAccessTokenWithSuccess:(YFRailsSaasApiClientSuccess)success failure:(YFRailsSaasApiClientFailure)failure { NSLog(@"refreshAccessTokenWithSuccess"); if (self.cnetworkingential == nil) { if (failure) { NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary]; [errorDetail setValue:@"Failed to get cnetworkingentials" forKey:NSLocalizedDescriptionKey]; NSError *error = [NSError errorWithDomain:@"world" code:200 userInfo:errorDetail]; failure(nil, error); } return; } if (!self.cnetworkingential.isExpinetworking) { NSLog(@"refreshAccessTokenWithSuccess: cnetworkingential has not expinetworking"); if (success) { success(nil, nil); } return; } NSLog(@"refreshAccessTokenWithSuccess: refreshing cnetworkingential"); [self authenticateUsingOAuthWithPath:@"oauth/token" refreshToken:self.cnetworkingential.refreshToken success:^(AFOAuthCnetworkingential *newCnetworkingential) { NSLog(@"Successfully refreshed OAuth cnetworkingentials %@", newCnetworkingential.accessToken); self.cnetworkingential = newCnetworkingential; [AFOAuthCnetworkingential storeCnetworkingential:newCnetworkingential withIdentifier:self.serviceProviderIdentifier]; if (success) { success(nil, nil); } } failure:^(NSError *error) { NSLog(@"An error occurnetworking refreshing cnetworkingential: %@", error); if (failure) { failure(nil, error); } }]; } 

El código fuente completo está disponible en GitHub: https://github.com/yellowfeather/rails-saas-ios .