[PYTHON] [Boto3] Rechercher des utilisateurs Cognito avec l'API List Users

La documentation indique que vous pouvez obtenir l'utilisateur comme suit:

response = client.list_users(
    UserPoolId='string',
    AttributesToGet=[
        'string',
    ],
    Limit=123,
    PaginationToken='string',
    Filter='string'
)

from:https://boto3.readthedocs.io/en/latest/reference/services/cognito-idp.html#CognitoIdentityProvider.Client.list_users

Obtenez 60 utilisateurs

import boto3
client = boto3.client('cognito-idp')
response = client.list_users(
    UserPoolId='YOUR_USER_POOL_ID'
)

Si vous spécifiez uniquement l'ID du pool d'utilisateurs, les 60 premiers tous les utilisateurs </ s> seront renvoyés. J'ai pensé "Si vous ne spécifiez pas Limit, vous obtiendrez tous les enregistrements", mais il semble que seuls les 60 premiers enregistrements sont acquis.

Recherche par adresse e-mail

En écrivant ʻemail = "hoge" `dans Filtre, vous ne pouvez rechercher que les utilisateurs avec l'adresse e-mail correspondante.

import boto3
client = boto3.client('cognito-idp')
response = client.list_users(
    UserPoolId='YOUR_USER_POOL_ID',
    Filter="email = \"hide\"",
)

Dans cet exemple, nous obtiendrons tous les utilisateurs qui utilisent des adresses e-mail contenant les caractères «hide».

En définissant ^ = au lieu de =, vous pouvez également rechercher des "adresses e-mail commençant par hide".

Conseils: les attributs personnalisés ne peuvent pas être recherchés avec Filter

Vous ne pouvez rechercher que des attributs standard. Les attributs personnalisés ne peuvent pas être recherchés. En effet, seuls les attributs indexés peuvent être recherchés et les attributs personnalisés ne peuvent pas être indexés. http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/how-to-manage-user-accounts.html#cognito-user-pools-searching-for-users-using-listusers-api

Il semble que la recherche d'utilisateurs à l'aide d'attributs personnalisés n'est actuellement pas prise en charge.

Il semble préférable de stocker les attributs que vous souhaitez rechercher dans DynamoDB ou AES (Amazon Elasticsearch Service).

Obtenez les 10 meilleurs utilisateurs

Vous pouvez réduire le nombre d'acquisitions en spécifiant un nombre dans la requête Limite.

import boto3
client = boto3.client('cognito-idp')
response = client.list_users(
    UserPoolId='YOUR_USER_POOL_ID',
    Limit=10,
)

Conseils: la limite est de 60

Si vous essayez d'acquérir 61 ou plusieurs données à la fois et définissez la limite sur une valeur de 61 ou plus, une erreur se produit.

ClientError: An error occurred (InvalidParameterException) when calling the ListUsers operation: 1 validation error detected: Value '500' at 'limit' failed to satisfy constraint: Member must have value less than or equal to 60

Je pense qu'il serait préférable de faire un appel récursif comme celui-ci.

def getUser():
    client = boto3.client('cognito-idp')
    response = self.client.list_users(
        UserPoolId="YOUR_USERPOOL_ID"
    )
    return response

def getUsersWithPagenation(PaginationToken):
    response = self.client.list_users(
        UserPoolId="YOUR_USERPOOL_ID",
        PaginationToken=PaginationToken
    )
    return response

def workerNode(users):
    for user in users["Users"]:
    	# Do Something
    if 'PaginationToken' in users:
        newUsers = getUsersWithPagenation(users["PaginationToken"])
        workerNode(newUsers)

users = getUser()
workerNode(users)

Recommended Posts

[Boto3] Rechercher des utilisateurs Cognito avec l'API List Users
Obtenir une liste d'utilisateurs IAM avec Boto3
Liste de recherche des éléments en double
Appelez l'API avec python3.
Accédez à l'API Etherpad-lite avec Python
Recherche de mots composés à phase identique avec opencv
Python> sys.path> Liste de chaînes indiquant le chemin pour rechercher des modules
Essayez d'envoyer un e-mail avec la bibliothèque cliente de l'API Gmail pour Java
Recherchez des mots-clés Twitter avec tweepy et écrivez les résultats dans Excel
Recherche de synonymes dans la liste de mots (csv) par Python Japanese WordNet
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
Accéder à l'API Docker Remote avec des requêtes
Touchez la liste Twitter avec tweepy
Demandez Pi avec la commande bc
Changer la liste dans l'instruction for
Rechercher le labyrinthe avec l'algorithme python A *
Carte thermique pour la recherche de grille avec Matplotlib
La troisième nuit de la boucle avec pour
Obtenez des vacances avec l'API Google Agenda
La deuxième nuit de la boucle avec pour
Jouez avec Dajare en utilisant l'API COTOHA
[Renforcer l'apprentissage] Rechercher le meilleur itinéraire
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
Rechercher des fichiers avec le code de saut de ligne CR + LF dans le répertoire courant
Créez une base de données propre pour les tests avec FastAPI et effectuez le test Unittest de l'API avec pytest
Après avoir frappé l'API Qiita avec Python pour obtenir une liste d'articles pour les débutants, nous visiterons les articles divins
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
Création d'un wrapper Python pour l'API Qiita
Raisonnement causal et recherche causale par Python (pour les débutants)
Présentation du modèle DCGAN pour Cifar 10 avec keras
Jusqu'à ce que vous utilisiez l'API Kaggle avec Colab
Utilisez Logger avec Python pour le moment
J'ai joué avec Floydhub pour le moment
Conseils pour accéder à l'API ATND avec Python
Obtenez un jeton d'accès pour l'API Pocket
Gérez bien AWS avec la bibliothèque Python Boto
Rechercher par la valeur de l'instance dans la liste
Décrivez ec2 avec boto3 et récupérez la valeur
Collecter des images pour l'apprentissage automatique (API Bing Search)
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
Construisez un serveur API pour vérifier le fonctionnement de l'implémentation frontale avec python3 et Flask
[Pour les débutants] Comment afficher des cartes et des champs de recherche à l'aide de l'API Javascript GoogleMap