2017-09-28 4 views
0

AWS CognitoはSwiftアプリに統合され、ログインが機能します。しかし、AWSCognitoIdentityProvider APIを使用しようとすると、返されるtask.resultはnilになります。どうして?なぜAWSCognitoIdentityProvider.getAdminUserおよびAWSCognitoIdentityProvider.listUsersがnilのtask.resultを返しますか?

let pool = AWSCognitoIdentityUserPool.default() 
let poolId = pool.userPoolConfiguration.poolId 

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId:poolId) 
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) 
AWSServiceManager.default().defaultServiceConfiguration = configuration 

let aguReq = AWSCognitoIdentityProviderAdminGetUserRequest() 
aguReq?.userPoolId = poolId 
aguReq?.username = "USERNAME_GOES_HERE" 

let luReq = AWSCognitoIdentityProviderListUsersRequest() 
luReq?.userPoolId = poolId 

let acpDefault = AWSCognitoIdentityProvider.default() 
acpDefault.adminGetUser(aguReq!).continueWith(block: { (task: AWSTask<AWSCognitoIdentityProviderAdminGetUserResponse>) -> Any? in 
    task.result?.userAttributes?.forEach({ (attr: AWSCognitoIdentityProviderAttributeType) in 
    let attrName = attr.name 
    let attrValue = attr.value 
    print("attrName=\(String(describing: attrName)); attrValue=\(String(describing: attrValue))") 
    }) 
    return nil 
}) 

acpDefault.listUsers(luReq!).continueWith(block: { (task: AWSTask<AWSCognitoIdentityProviderListUsersResponse>) -> Any? in 
    task.result?.users?.forEach({ (u: AWSCognitoIdentityProviderUserType) in 
    print("username=\(String(describing: u.username))") 
    }) 
    return nil 
}) 

Info.plist参照Cognitoための重要な特性のすべて:ここでは、コードです。 listUsersadminGetUserは何らかの方法で予約されている可能性がありますか?

また、USERNAME_GOES_HEREスタブについては、常にCognito usernameを配置しますが、Cognito IDまたはサブUUIDは配置しません。それは動作しますか? (私がusernameは必ずしもCognitoユーザー間で一意ではないことをCognitoに思ったので、usernameが、必要であることを奇妙に思える。

感謝。

答えて

1

AdminGetUserとListUsersはあなたからアクセスする必要があるのAPIバックエンドと通話しています有効なIAMの資格情報を提示する必要があります。

あなたのiOSアプリからこれらのAPIを呼び出すべきではありません。代わりに、ユーザーがログインして、その後のAPI適切なCognitoユーザープールを呼び出すことができますiOS Mobile SDKメソッドを使用します。

として、あなたの呼び出しが失敗する理由には、連合アイデンティティサービスの一時的な資格情報を使用して必要なIAM資格情報を提供しようとしているようです。 IDプールを使用して資格プロバイダーをインスタンス化していますが、IDプールIDではなくユーザープールIDを渡しています。詳細はthis answerを参照してください。

+0

これらがバックエンドAPIである場合、フロントエンドクライアントはどのように「サブ」UUIDを取得できますか? –

関連する問題