寻找Python示例来搜索Cognito身份并更新属性

时间:2019-01-09 16:55:32

标签: python-3.x aws-lambda boto3 amazon-cognito

我正在集成使用网络挂钩的支付解决方案。在结帐期间,将为付款提供者提供Cognito用户ID(或用户子)。成功结帐后,支付提供商会调用一个Web挂钩,该挂钩已由我使用AWS Lambda / Gateway和Python实现。在此Web挂钩中,我获得了付款状态和Cognito用户ID。

接下来我要做的是更新或在给定的Cognito用户ID上设置订阅状态的属性。

我已经找到了一段JavaScript代码,看起来好像它们可以带我到那儿,但是我从它应该如何工作中缺少了一些东西。这是我找到的用于搜索用户的JS代码:

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.");
        }
    }
});

我需要上述版本的Python版本...我也不太确定如何初始化AWS.CognitoIdentityServiceProvider以便进行搜索。似乎我需要设置IAM凭据才能搜索用户身份池,不是吗?

任何有关如何使用Python在Cognito身份池中搜索用户的指针将不胜感激!

1 个答案:

答案 0 :(得分:0)

以下是搜索带有前缀的用户的方法:

import json
import boto3
import datetime

client = boto3.client('cognito-idp')

def default(o):
    if isinstance(o, (datetime.date, datetime.datetime)):
        return o.isoformat()

def lambda_handler(event, context):
    response = client.list_users(
        UserPoolId='<UserPoolID>',
        Limit=1,
        Filter='given_name^=\"Xavier\"'
    )
    return {
        'statusCode': 200,
        'body': json.dumps(response['Users'], 
            sort_keys=True,
            indent=1,
            default=default)
    }

您需要用实际的Cognito用户池ID替换。