0

J'utilise AWS Cognito, intégré à l'application iOS via MobileHub pour me connecter via Facebook. Tout fonctionne correctement jusqu'à ce que je me déconnecte de l'identité existante et essaye de me connecter avec un autre compte FB (ou même avec le même).
Dans ce cas, je reçois cette erreur, chaque fois que je l'appelle tout Lambda AWS:AWS Cognito iOS. Erreur non authentifiée après la fermeture de session

AWSiOSSDK v2.4.9 [Erreur] ligne AWSCredentialsProvider.m: 577.
[informations d'identification AWSCognitoCredentialsProvider].
Impossible d'actualiser. L'erreur est [Erreur de domaine = code com.amazonaws.AWSCognitoIdentityErrorDomain = 8 "(null)" UserInfo = {__ type = NotAuthorizedException, message = accès non authentifié est pas pris en charge pour ce pool d'identité.}]

Mais si je termine et redémarrer l'application, tout fonctionne correctement à nouveau.

Cette erreur provient here:

À la lecture du code AWS SDK je vois que cela se produit parce que l'identité de Cognito ne reçoit pas les connexions du fournisseur des titres de compétences here:

Je suppose que cela est prévu, puisque je Je me suis déconnecté. Mais le problème est que même après la connexion à FB AWS me considère encore non autorisé. Des questions similaires sur StackOverflow je vois, que dans les personnes passées définir le dictionnaire des logins sur AWSCognitoCredentialsProvider manuellement. Mais maintenant cette propriété est dépréciée et d'autres propriétés similaires sont en lecture seule.

Voici ma configuration AWS dans la méthode AppDelegate didFinishLaunchingWithOptions:

let cred = AWSCognitoCredentialsProvider(regionType: .euWest1, identityPoolId: "POOLID") 
let config = AWSServiceConfiguration(region: .euWest1, credentialsProvider: cred) 
AWSServiceManager.default().defaultServiceConfiguration = config 

if let config = config { 
     config.timeoutIntervalForRequest = 30 
     config.timeoutIntervalForResource = 30 
     config.maxRetryCount = 3 
     AWSLambdaInvoker.register(with: config, forKey: "key") 
} 

let mapperConfiguration = AWSDynamoDBObjectMapperConfiguration() 
mapperConfiguration.saveBehavior = .updateSkipNullAttributes 
AWSDynamoDBObjectMapper.register(with: config!, objectMapperConfiguration: mapperConfiguration, forKey: "updateObjectMapper") 

Et voici le code logout:

AWSIdentityManager.defaultIdentityManager().logout { (result, error) in 
    if let cp = AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider as? AWSCognitoCredentialsProvider { 
      cp.clearKeychain() 
    } 
     // Open login screen 
} 

S'il vous plaît noter que j'ai essayé à la fois porte-clés de compensation et de ne pas le faire. Le résultat est le même.

J'apprécierais vraiment n'importe quelle aide!
Cordialement, Alex

+0

J'utilise le même AWSIdentityManager en cours de déconnexion et j'ai des problèmes comme vous. Il montre '' 'UserInfo = {__ type = NotAuthorizedException, message = L'accès non authentifié n'est pas supporté pour ce groupe d'identités.}' '' Mais je me déconnecte encore avec succès, je ne sais pas pourquoi. Des solutions? –

+0

Quel service vous donne cette erreur? Certains AWSLambda? Ou AWSIdentityManager lui-même? –

+0

AWSIdentityManager. Et il traite de connexion personnalisée comme un charme, Mais quand je me déconnecte en utilisant [[AWSIdentityManager defaultIdentityManager] logoutWithCompletionHandler:^(résultat de l'ID, erreur NSError *) ' Il apparaît l'erreur que j'ai mentionné ci-dessus. Je dois faire un autre travail après détection de la déconnexion n'a aucune erreur. Maintenant j'utilise '[[AWSIdentityManager defaultIdentityManager] isLoggedin]' à la place pour faire un autre travail quand je détecte que l'utilisateur se déconnecte dans le gestionnaire ci-dessus. –

Répondre

0

Faites-vous cela dans l'implémentation de la méthode de connexion?

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { 
    FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken]; 
    if(fbToken){ 
     NSString *token = fbToken.tokenString; 
     return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }]; 
    }else{ 
      return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login" 
                  code:-1 
                 userInfo:@{@"error":@"No current Facebook access token"}]]; 
    } 
} 

More details.

+0

Salut, Rachit! Je n'utilise pas AWSIdentityProviderManager personnalisé pour instancier AWSCognitoCredentialsProvider, comme vous pouvez le voir dans mon code. Par conséquent, je n'ai pas implémenté la méthode "logins". Au lieu de cela, j'utilise [enhanced] (http: // docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html), qui repose sur AWS SDK pour gérer les connexions. Voici un exemple de mon login 'AWSIdentityManager.defaultIdentityManager(). LoginWithSign (AWSFacebookSignInProvider.sharedInstance()) {(résultat, erreur) dans {}' –