2016-11-15 8 views
0

Swift 3で書かれたiOSアプリケーション用のユーザーログインシステムを作成しようとしています。下のコードで、ユーザープール内のユーザーの一意のCognito IDを取得しましたが、このIDをどうすればよいか分かりません。それをユーザーにリンクし、そのユーザーに関連付けられた属性を取得できますか?Cognito IDとユーザー属性をリンクするにはどうすればよいですか?

コード:

@IBAction func loginPressed(_ sender: Any) { 
    user = self.pool!.getUser(usernameTextField.text!) 
    user?.getSession(usernameTextField.text!, password: passwordTextField.text!, validationData: nil).continue({ task in 
     if let err = task.error { // some sort of error 
      print("LOGIN FAILED") 
      print(err) 
      //print(err.userInfo["message"] as! String) 
     } 
     else { //Successful login! 

      // this gets our token from the User Pool 
      let ret = task.result! as AWSCognitoIdentityUserSession 
      let myToken = ret.idToken?.tokenString; 

      print("Token: ", myToken); 

      let customcedentialProvider = AWSCustomIdentityProvider(tokens: [AWSCustomIdentityProvider.CognitoTokenKey : myToken!]) 
      let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoConstants.COGNITO_REGIONTYPE, identityPoolId: CognitoConstants.COGNITO_IDENTITY_POOL_ID, identityProviderManager: customcedentialProvider) 
      let configuration = AWSServiceConfiguration(region: CognitoConstants.COGNITO_REGIONTYPE, credentialsProvider:credentialsProvider) 
      AWSServiceManager.default().defaultServiceConfiguration = configuration 

      // wipe cached creds 
      credentialsProvider.clearKeychain() 
      credentialsProvider.clearCredentials() 

      // hit it 
      credentialsProvider.getIdentityId().continue({ (task: AWSTask!) -> AnyObject! in 

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

       } else { 

        // the task result will contain the identity id 
        let UserIdentityID = task.result as String? // Im saving user identity id in constant variable called "kUserIdentityID" 
        print(UserIdentityID)// my identityID 
        print(credentialsProvider.identityId)// my identityID 
       } 

       return nil 
      }) 

     } 
    return nil 
    }) 
} 

出力(アイデンティティID):

Optional("us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX") 

ありがとう!

+1

スウィフトコードはよくわかりません。これを使って、javascriptを使って遊んだ。だから、Cognito UserPoolはFacebook、Googleなどの「アイデンティティプロバイダ」です.Cognito Federated Identityは、さまざまなログイン間のマッピングを、「Cognito Identity ID」と呼ばれる1つの一意のIDに保つのに役立ちます。通常、Cognito Federated IDでデータセット内のデータを格納および取得します。複数ログインの場合は、それらを同期します。私があなたの質問を理解している場合は、上記のデータセットにユーザープール "ユーザー名"を格納して、ユーザープールを取得してユーザープールを照会することができます。 – Partha

+0

ガイダンスをありがとう!私は、このツールをしっかりと理解していませんでした。ユーザーのデータセットを作成してユーザー情報を登録することができました。ログインすると、ユーザー情報を取得し、認証されたユーザーとしてアプリケーションに進むことができるようになりました。 –

答えて

1

Cognito UserPoolは、Facebook、Googleなどの「アイデンティティプロバイダ」です.Cognito Federated Identityは、さまざまなログイン間のマッピングを1つの一意のID(「Cognito Identity ID」と呼ばれることもあります)に維持するのに役立ちます。通常、Cognito Federated IDでデータセット内のデータを格納および取得します。複数ログインの場合は、それらを同期します。あなたの質問が分かっている場合は、上記のデータセットにユーザープール「ユーザー名」を格納して、ユーザープールを取得してユーザープールに問い合わせることができます。

1

self.poolはCognitoユーザープールを指します。ユーザープールには少なくともユーザー名とパスワードがありますが、通常はuser.getDetailsを使用して取得できる他の属性もあります。ユーザプールはIdP(アイデンティティプロバイダ)です。

identityIdは、IdPからの1つ以上のアイデンティティに一意のIDを提供することを主な目的としたCognito Identityアイデアです。

混乱する心配はありません。 Cognitoは非常に混乱しています。私は私のメモから少しパワーポイントのプレゼンテーションを書いたので、とても混乱していました。ここにあなたに役立つダイアグラムへのリンクがあります。 Diagram of Cognito

また、AWSモバイルハブヘルパーを出発点として使用することをお勧めします。迅速なコードサンプルアプリケーションをダウンロードします。サンプルコードではaws-mobilehub-helper-iosラッパーを使用しています。このラッパーは多くのSDKを簡素化し、より合理的にします。ダウンロードしたコードはSwift2ですが、速やかに実行するのは難しくありません。

関連する問題