如何通过子/ UUID查找认知用户?

时间:2017-04-19 06:50:36

标签: java amazon-web-services amazon-cognito

我想通过他们的sub查找我的Cognito用户池中的用户,据我所知,这只是他们的UUID。我想在Lambda函数中用Java做这个,但是在AWS的文档中找不到如何做到这一点。有什么想法吗?

4 个答案:

答案 0 :(得分:16)

现在它有效。 http://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html

支持的属性列表中的

“sub”。 JavaScript示例:

var cog = new AWS.CognitoIdentityServiceProvider();

var filter = "sub = \"" + userSub + "\"";
var req = {
    "Filter": filter,
    "UserPoolId": "your pool id" // looks like us-east-9_KDFn1cvys
};

cog.listUsers(req, function(err, data) {
    if (err) {
        console.log(err);
    }
    else {
        if (data.Users.length === 1){ //as far as we search by sub, should be only one user.
            var user = data.Users[0];
            var attributes = data.Users[0].Attributes;
        } else {
            console.log("Something wrong.");
        }
    }
});

答案 1 :(得分:4)

截至今天,Cognito用户池无法实现这一目标。

只能使用用户名或别名查找用户。 ListUsers API还允许通过在某些standard attributes上提供搜索过滤器来搜索用户,但不是其中之一。

答案 2 :(得分:-1)

     // class var
     protected final AWSCognitoIdentityProviderClient identityUserPoolProviderClient;

    // initialize the Cognito Provider client.  This is used to talk to the user pool
    identityUserPoolProviderClient = new AWSCognitoIdentityProviderClient(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY)); 
    identityUserPoolProviderClient.setRegion(RegionUtils.getRegion(USER_POOL_REGION)); 


    // ...some init code omitted        

// build the request
AdminGetUserRequest idRequest = new AdminGetUserRequest();
idRequest.withUserPoolId(USER_POOL_ID);
idRequest.withUsername(username);

// call cognito for the result
AdminGetUserResult result = identityUserPoolProviderClient.adminGetUser(idRequest);
// loop through results 

List<UserType> userTypeList = result.getUsers();
// loop through them
for (UserType userType : userTypeList) {
    List<AttributeType> attributeList = userType.getAttributes();
    for (AttributeType attribute : attributeList) {
        String attName = attribute.getName();
        String attValue = attribute.getValue();
        System.out.println(attName + ": " + attValue);
    }
}

答案 3 :(得分:-1)

老问题了,但是您在Cognito的username方法中重载了adminGetUser参数。不幸的是,它没有记录在案:adminGetUser SDK

这是一个片段:

const params = {
  UserPoolId: 'someUserPoolId'
  Username: 'random-string-sub-uuid',
};

CognitoService.adminGetUser(params,(err, data) => {
  console.log(data);
})

Returns:
{ Username: 'random-string-sub-uuid',
  UserAttributes:
   [ { Name: 'sub', Value: 'random-string-sub-uuid' },
     { Name: 'custom:attributeName', Value: 'someValue' },
     { Name: 'email_verified', Value: 'false' },
     { Name: 'name', Value: 'nameValue' },
     { Name: 'email', Value: 'user@stackoverflow.com' } ],
  UserCreateDate: 2018-10-12T14:04:04.357Z,
  UserLastModifiedDate: 2018-10-12T14:05:03.843Z,
  Enabled: true,
  UserStatus: 'CONFIRMED' }