Autenticação do Cognito funcionando, mas erros mostram?
Basicamente, estou usando uma identidade autenticada do desenvolvedor para autenticar meus usuários. Mesmo que esse erro seja exibido:
AWSiOSSDKv2 [Detalhado] AWSURLResponseSerialization.m line: 87 | - [AWSJSONResponseSerializer responseObjectForResponse: originalRequest: currentRequest: data: error:] | Corpo da resposta: [{"__type": "InvalidParameterException", "message": "Forneça um provedor público válido"}] 20/10/2015 17: 50: 19.251 BusyTime [56549: 7365231] AWSiOSSDKv2 [Erro] AWSCredentialsProvider.m linha: 435 | __73- [AWSCognitoCredentialsProvider getCredentialsWithCognito: autenticado:] _ block_invoke | Falha no GetCredentialsForIdentity. O erro é [Domínio do erro = Código com.amazonaws.AWSCognitoIdentityErrorDomain = 7 "A operação não pôde ser concluída. (Erro 7 do com.amazonaws.AWSCognitoIdentityErrorDomain 7.)" UserInfo = 0x7f9d9342dde0 {__type = Provedor público válido, mensagem = InvalidParameterException }]
Embora esse erro seja mostrado, ainda estou retornando meu identityId e Token e chamando com êxito um método lambda que requer privilégios autenticados para chamar. Acredito que tenha algo a ver com o meu método de atualização, mas não tenho muita certeza. Por favor, ajude-me a lidar com este erro.
meu código de provedor de credenciais:
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;
}];
Meu método de atualização:
- (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];
}