Cognito UserPoolのListUserAPIで停止済のアカウントだけ抽出する

まとめ AWSのドキュメントだと、 cognito:user_status (コンソールでは [Enabled] となっています) と書かれていますが、ListUsers APIのFilterで使用するのはstatusの […]

広告ここから
広告ここまで

目次

    まとめ

    AWSのドキュメントだと、

    cognito:user_status (コンソールでは [Enabled] となっています)
    

    と書かれていますが、ListUsers APIのFilterで使用するのはstatusの方です。

    コード

    profile = 'aws-cli-profile'
    session = Session(profile_name=profile)
    cognito = session.client('cognito-idp')
    response = cognito.list_users(
        UserPoolId='us-east-1_XXXXXXX',
        Filter="status='Disabled'"
    )
    for data in response['Users']:
        print(data['Username'])
        print(data['Enabled'])
    

    実行結果

    $ python test.py 
    development
    False
    dev_hideokamoto
    False
    

    アクティブなユーザーのみ抽出する

    「EnabledがEnabledで、なおかつStatusがCONFIRMEDになってるユーザー」は、アクティベーションも済んでいるのでおそらくアクティブなユーザーと思われます。

    ということでそういうユーザーだけ引っ張り出してみましょう。

    profile = 'aws-cli-profile'
    session = Session(profile_name=profile)
    cognito = session.client('cognito-idp')
    response = cognito.list_users(
        UserPoolId='us-east-1_XXXXXXX',
        Filter="cognito:user_status='CONFIRMED'"
    )
    for data in response['Users']:
        if data['Enabled']:
            print(data['Username'])
            print(data['Enabled'])
            print(data['UserStatus'])
    

    実行結果

    $ python test.py 
    development
    True
    CONFIRMED
    dev_hideokamoto
    True
    CONFIRMED
    

    Tips:Filterできるのは1属性のみ

    ListUserAPIのFilterにはANDやOR検索がありません。
    ですので、数を絞り込めそうな方の属性でListUserを実行し、その後もう片方の属性の状態を確認するという方法になります。

    今回は「”登録はしたけど、メールでのアクティベーションを実行していない”というユーザーが多い」だろうと判断してstatusの方で検索しました。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark