Ищите пример Python для поиска идентификатора Cognito и обновления атрибутов - PullRequest
0 голосов
/ 09 января 2019

Я интегрирую платежное решение, которое использует веб-хуки. Поставщик платежа получает идентификатор пользователя Cognito (или пользовательскую подпрограмму) во время оформления заказа. После успешной оплаты провайдер платежа вызывает веб-ловушку, которую я реализовал, используя AWS Lambda / Gateway и Python. В рамках этого веб-хука я получаю статус платежа и идентификатор пользователя Cognito.

Далее я хотел бы обновить или установить атрибут для данного идентификатора пользователя Cognito для статуса подписки.

Я нашел фрагменты кода 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 для поиска в пуле идентификации пользователя, нет?

Буду признателен за любые указания по поиску пользователя в пуле идентификации Cognito с использованием Python!

1 Ответ

0 голосов
/ 18 июня 2019

Вот как вы можете искать пользователя с префиксом:

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.

...