2016-05-27 1 views
1

J'utilise Xcode (Swift). J'ai essayé d'écrire du code qui va s'inscrire, confirmer l'utilisateur et connecter l'utilisateur au pool d'utilisateurs. Puis, en cas de connexion réussie, je souhaite qu'il soit associé à Amazon Cognito Identity. Fondamentalement, je veux avoir autant d'identité que de nombreux utilisateurs dans le pool d'utilisateurs.Intégration des pools d'utilisateurs Congnito avec l'identité Amazon Cognito

Jusqu'à présent, je suis en mesure de vous inscrire, confirmer l'utilisateur et vous connecter (en utilisant un login explicite). En cas de réussite de la connexion, j'essaie de lier cet utilisateur à Cognito Identity Pool afin qu'un identifiant unique puisse être généré pour cet utilisateur.

Actuellement, si je me connecte à l'application en tant qu'utilisateur différent, le même ID d'identité lui est affecté que l'utilisateur précédent. En d'autres termes, quel que soit le nombre d'utilisateurs présents dans mon pool d'utilisateurs, sur le pool de groupes d'identités fédérées AWS Cogntio, je n'ai qu'un seul ID d'identité. Idéalement, il aurait dû créer un ID d'identité distinct pour différents utilisateurs.

Ci-dessous le code dans le délégué de l'application dans la fonction didFinishLaunchingWithOptions.

let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: nil) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfiguration 
let configurationUserPool = AWSCognitoIdentityUserPoolConfiguration.init(clientId: "####", clientSecret: "####", poolId: "####") 
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: configurationUserPool, forKey: "testPool") 
self.userPool = AWSCognitoIdentityUserPool(forKey: "testPool") 

Vous trouverez ci-dessous le code du contrôleur Sign View.

@IBAction func signIn(sender: AnyObject) { 

    let user = self.userPool.getUser(userName.text!) 

    user.getSession(userName.text!, password: password.text!, validationData: nil, scopes: nil).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { 
     (task:AWSTask!) -> AnyObject! in 

     if task.error != nil { 
      print(task.error) 
     } else { 
      print("Successful Login") 

      let cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool) 
      let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: cp) 

      AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration     
      cp.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in 

       if (task.error != nil) { 
        print("Error: ") 

       } else { 
        // the task result will contain the identity id 
        print("Success with id") 
        print(task.result) 
       } 
       return nil 
      } 

      dispatch_async(dispatch_get_main_queue()){ 
       // do stuff here ... 
      } 
     } 
     return nil 
    }) 
} 

Répondre

1

Enfin, j'ai été capable de résoudre ce problème. Le problème était que chaque fois que je me connectais à un nouvel utilisateur, je réinitialisais le fournisseur d'informations d'identification. Quand je l'ai déplacé vers le délégué de l'application, il a commencé à travailler comme il le devrait.

Cette fonction ne doit pas être dans la fonction SignIn, mais plutôt dans App Delegate.

let cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool) 
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: cp) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration     

Bonne façon.

let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: nil) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfiguration 
let configurationUserPool = AWSCognitoIdentityUserPoolConfiguration.init(clientId: "####", clientSecret: "####", poolId: "####") 
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: configurationUserPool, forKey: "testPool") 
self.userPool = AWSCognitoIdentityUserPool(forKey: "testPool") 
self.cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool) 
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: self.cp) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration     
+0

Pourriez-vous s'il vous plaît fournir toute référence ou documentation que vous avez utilisée pour construire ceci. Il y a beaucoup de tutoriels liés au pool d'utilisateurs disponibles dans l'objectif c, mais il est très difficile de trouver une référence Swift. –

+0

J'ai essentiellement implémenté cela, mais je trouve toujours que tous les utilisateurs stockent toujours dans le même pool d'identité. Toutes les autres solutions que j'ai vues mentionnent un fournisseur d'identité personnalisé. – RickR