2016-07-31 130 views
1

我在使用CognitoUserPoolsSample iOS Obj-C應用程序並試圖添加與Cognito Identity的集成。我建立了一個用戶池和一個身份池,其中用戶池設置爲身份池的身份驗證提供程序。用戶池工作正常,但用戶沒有出現在身份池中。 下面是我在applicationDidFinishLaunchingWithOptions:如何將Cognito用戶池與身份池集成?

//setup service config 
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; 

//Configure user pool 
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"CLIENT_ID" clientSecret:@"CLIENT_SECRET" poolId:@"POOL_ID"]; 
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"]; 
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; 

//configure identity pool 
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] 
                 initWithRegionType:AWSRegionUSEast1 
                 identityPoolId:@"IDENTITY_POOL_ID" 
                 identityProviderManager:pool]; 
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; 
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; 

這是正確的那麼遠?接下來的步驟是什麼?當我註冊一個新用戶時,它沒有出現在身份池中?身份池控制檯顯示創建的零身份。

回答

1

嗨這裏的關鍵是要了解的是,當你撥打:

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] 
                 initWithRegionType:AWSRegionUSEast1 
                 identityPoolId:@"IDENTITY_POOL_ID" 
                 identityProviderManager:pool]; 

的AWS框架將設置一切爲你和cognito用戶羣和整合與聯合身份將seamelessyly工作。

一個基調,我initally忽視的是在這裏:http://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html

[[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) { 
    if (task.error) { 
     NSLog(@"Error: %@", task.error); 
    } 
else { 
     // the task result will contain the identity id 
     NSString *cognitoId = task.result; 
    } 
return nil; 
}]; 

這迫使您的憑據從服務器刷新。包含在用戶和會話中的對象可用於確認登錄和相關的認知ID以及會話令牌。

注意不要在上面的代碼中使用MobileHubHelper。由於移動HUB幫手將摧毀所有這一切。

+0

您能否詳細說明您的陳述:「請注意不要將MobileHubHelper與上面的代碼一起使用,因爲移動HUB助手會摧毀所有這些。」? – cyanware

+0

是否說如果我從他們的Mobile SDK 2.4.x中包含Amazon的AWSMobileHubHelper.framework,那麼它將與Cognito用戶池不兼容?目前,我無法在身份驗證後將我的用戶池登錄與我的聯合身份驗證相關聯,但我爲什麼會迷失。它應該是「自動」和「無縫」的,但它不適合我。 – cyanware

1

您需要將來自Cognito用戶池的令牌提供給Cognito聯合身份服務。這正是您將Facebook或Google或任何其他提供商與聯合身份識別服務集成的原因。

這個dev guide pageblog post詳細介紹了這個過程。

+0

感謝您回覆@ChetanMehta。我上面列出的代碼是這些指南推薦的。我還沒有弄清楚的一部分是指南說:「用戶通過身份驗證後,將該用戶的身份標記添加到憑證提供程序中的登錄映射中。」我怎麼做?謝謝! – MaxB

+0

有一個[類似的問題](http://stackoverflow.com/questions/37137278/aws-cognito-credentialsprovider-login-always-shows-nil-swift/3715113)我回答了一陣子。希望這會有所幫助。 –

+0

嗨@ChetanMehta,我正在重新開始工作。當我在憑證提供者上調用getIdentityId時,我現在收到錯誤:「Invalid login token。Issuer does not match providerName,__type = NotAuthorizedException」。你有建議調試嗎? – MaxB

相關問題