首页 > 解决方案 > 寻找 Python 示例以搜索 Cognito 身份并更新属性

问题描述

我正在集成一个使用网络挂钩的支付解决方案。在结帐期间,支付提供商会获得 Cognito 用户 ID(或用户子)。成功结帐后,支付提供商会调用我使用 AWS Lambda/Gateway 和 Python 实现的网络挂钩。在这个网络挂钩中,我获得了付款状态和 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 身份池中搜索用户的指示都将不胜感激!

标签: python-3.xaws-lambdaboto3amazon-cognito

解决方案


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

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。


推荐阅读