我正在集成使用网络挂钩的支付解决方案。在结帐期间,将为付款提供者提供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身份池中搜索用户的指针将不胜感激!
答案 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替换。