¿Autenticación de Cognito funciona pero se muestran errores?
Básicamente estoy usando una identidad autenticada de desarrollador para autenticar a mis usuarios. Aunque este error se muestra:
AWSiOSSDKv2 [Verbose] AWSURLResponseSerialization.m línea: 87 | - [AWSJSONResponseSerializer responseObjectForResponse: originalRequest: currentRequest: data: error:] | Cuerpo de respuesta: [{"__type": "InvalidParameterException", "mensaje": "Proporcione un proveedor público válido"}] 2015-10-20 17: 50: 19.251 BusyTime [56549: 7365231] AWSiOSSDKv2 [Error] AWSCredentialsProvider.m línea: 435 | __73- [AWSCognitoCredentialsProvider getCredentialsWithCognito: autenticado:] _ block_invoke | GetCredentialsForIdentity falló. El error es [Error Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 7 "La operación no se pudo completar. (Com.amazonaws.AWSCognitoIdentityErrorDomain error 7.)" UserInfo = 0x7f9d9342dde0 {__type = Mensaje inválido. }]
Aunque se muestra este error, sigo devolviendo mi identidad y token e invocando con éxito un método lambda que requiere privilegios autenticados para llamar. Creo que tiene algo que ver con mi método de actualización, pero no estoy exactamente seguro. Por favor, ayúdame a lidiar con este error.
mi código de proveedor de credenciales:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose;
id<AWSCognitoIdentityProvider> identityProvider = [[BusytimeAuthenticated alloc] initWithRegionType:AWSRegionUSEast1
identityId:nil
identityPoolId:@"EXAMPLEPOOLID"
logins:@{@"login.busytimeapp": [defaults objectForKey:@"username"]}
providerName:@"login.busytimeapp"
];
credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1
identityProvider:identityProvider
unauthRoleArn:nil
authRoleArn:nil];
configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
credentialsProvider:self.credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
[[credentialsProvider refresh] continueWithBlock:^id(BFTask *task){
[self testAuth];
return nil;
}];
Mi método de actualización:
- (BFTask *)refresh {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![self authenticatedWithProvider]) {
return [super getIdentityId];
}else{
NSDictionary *post = [[NSDictionary alloc] initWithObjectsAndKeys:
[defaults objectForKey:@"username"], @"username",
[defaults objectForKey:@"password"], @"password",
nil];
NSError *error;
NSData *postData = [NSJSONSerialization dataWithJSONObject:post options:0 error:&error];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"SOMEURL"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
__block BOOL isLogged = false;
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];
isLogged = true;
if(!newJSON){
NSLog(@"DID NOT AUTHENTICATE");
}else{
self.identityId = [newJSON objectForKey:@"IdentityId" ];
self.token = [newJSON objectForKey:@"Token" ];
NSLog(@"Result: %@", newJSON);
}
}] resume];
return [super getIdentityId];
}
return [super getIdentityId];
}