为什么AWSCognitoIdentityProvider.getAdminUser和AWSCognitoIdentityProvider.listUsers返回的是task.result为零?

时间:2017-09-28 22:23:31

标签: amazon-cognito aws-cognito

AWS Cognito已集成到我的Swift应用程序中并登录工作。但是,当我尝试使用AWSCognitoIdentityProvider api时,返回的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中认为username在Cognito用户中不一定是唯一的。

感谢。

1 个答案:

答案 0 :(得分:1)

AdminGetUser和ListUsers是应该从您后端访问的API,并且调用必须提供有效的IAM凭证。

您不应该从iOS应用中调用这些API。而是使用iOS Mobile SDK方法,这些方法将允许您的用户登录,然后调用相应的Cognito用户池API。

至于您的呼叫失败的原因,您似乎正在尝试使用联合身份服务临时凭证提供所需的IAM凭据。您正在使用标识池实例化凭据提供程序,但是传递用户池标识而不是标识池标识。有关详细说明,请参阅this answer