【问题标题】:How get Cognito users list in JSON-format如何以 JSON 格式获取 Cognito 用户列表
【发布时间】:2020-05-27 20:42:00
【问题描述】:

我将使用 Lambda 备份我的 Cognito 用户,但我无法使用 boto3 获取 JSON 格式的 Cognito 用户列表。我愿意:

import boto3
import os
import json
from botocore.exceptions import ClientError

COGNITO_POOL_ID = os.getenv('POOL_ID')
S3_BUCKET = os.getenv('BACKUP_BUCKET')
ENV_NAME = os.getenv('ENV_NAME')
filename = ENV_NAME + "-cognito-backup.json"
REGION = os.getenv('REGION')

cognito = boto3.client('cognito-idp', region_name=REGION)
s3 = boto3.resource('s3')

def lambda_handler (event,context):
    try:
        response = (cognito.list_users(UserPoolId=COGNITO_POOL_ID,AttributesToGet=['email_verified','email']))['Users']
        data = json.dumps(str(response)).encode('UTF-8')
        s3object = s3.Object(S3_BUCKET, filename)
        s3object.put(Body=(bytes(data)))
    except ClientError as error:
        print(error)

但是得到一个字符串,我根本不确定那是 JSON:

[{'Username': 'user1', 'Attributes': [{'Name': 'email_verified', 'Value': 'true'}, {'Name': 'email', 'Value': 'user1@xxxx.com'}], 'UserCreateDate': datetime.datetime(2020, 2, 10, 13, 13, 34, 457000, tzinfo=tzlocal()), 'UserLastModifiedDate': datetime.datetime(2020, 2, 10, 13, 13, 34, 457000, tzinfo=tzlocal()), 'Enabled': True, 'UserStatus': 'FORCE_CHANGE_PASSWORD'}]

我需要这样的东西:

[
  {
    "Username": "user1",
    "Attributes": [
      {
        "Name": "email_verified",
        "Value": "true"
      },
      {
        "Name": "email",
        "Value": "user1@xxxx.com"
      }
    ],

    "Enabled": "true",
    "UserStatus": "CONFIRMED"
  }
]

【问题讨论】:

    标签: amazon-web-services lambda boto3 amazon-cognito


    【解决方案1】:

    试试这个:

    import ast
    import json
    
    print(ast.literal_eval(json.dumps(response)))
    

    对于来自 SDK 的 dict 响应?

    编辑:刚刚意识到由于list_users SDK 也是 UserCreateDate 对象,json.dumps 将抱怨由于 UserCreateDate 键的数据时间值而导致的转换。如果你把它关掉,这将在没有 ast 模块的情况下工作 -

    import json
    data = {'Username': 'Google_11761250', 'Attributes': [{'Name': 'email', 'Value': 'abc@gmail.com'}],'Enabled': True, 'UserStatus': 'EXTERNAL_PROVIDER'}
    print((json.dumps(data)))
    
    > {"Username": "Google_1176125910", "Attributes": [{"Name": "email", "Value": "123@gmail.com"}], "Enabled": true, "UserStatus": "EXTERNAL_PROVIDER"}
    

    【讨论】:

      【解决方案2】:

      您可以使用检查输出类型

      type(output)
      

      我猜它可以是list 类型,所以你可以将它转换成JSONprettyprint,使用:

      print(json.dumps(output, indent=4))
      

      【讨论】:

        猜你喜欢
        • 2022-11-22
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 2022-07-24
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多