API 无法识别向 AWS Boto3 Cognito-idp 传递参数
Passing arguments to AWS Boto3 Cognito-idp isn't recognized by the API
我正在尝试在我的 Cognito 用户池中创建一个新用户。我正在使用 admin-create() 电话。
这是我的脚本:
#!/usr/bin/env python3
import boto3
import argparse
client = boto3.client('cognito-idp')
parser = argparse.ArgumentParser()
parser.add_argument('-username', dest='username')
parser.add_argument('-email', dest='email')
parser.add_argument('-phone_number', dest='phone_number')
args = parser.parse_args()
response = client.admin_create_user(
UserPoolId='eu-central-aaaaaaa',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='RESEND',
DesiredDeliveryMediums=[
'EMAIL'
],
)
如您所见,MessageAction=
设置为 RESEND
。
我运行正在执行以下命令:cognito.py -username test -email test@test.com -phone_number +12345678
这是我遇到的错误:
botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameterException) when calling the AdminCreateUser operation: No email provided but desired delivery medium was Email
如果我尝试为用户使用 email_verified
或 phone_number_verified
属性,可能会重现类似的错误。如果我将它们设置为 true,我会收到错误消息,告诉我无法验证 email/phone 因为没有提供。但正如您可以清楚地看到的那样。
我想了解为什么我的论点没有得到认可。
奇怪的是,如果我将属性更改为 MessageAction='SUPPRESS'
,而且如果我不添加验证 email/phone 属性,那么用户将使用用户名、电子邮件创建phone 我通过了。
所以仅作为示例,这里是工作代码:
#!/usr/bin/env python3
import boto3
import argparse
client = boto3.client('cognito-idp')
parser = argparse.ArgumentParser()
parser.add_argument('-username', dest='username')
parser.add_argument('-email', dest='email')
parser.add_argument('-phone_number', dest='phone_number')
args = parser.parse_args()
response = client.admin_create_user(
UserPoolId='eu-central-aaaaaa',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='SUPPRESS',
DesiredDeliveryMediums=[
'EMAIL'
],
)
我可以再次运行命令,然后将创建用户:
cognito.py -username test -email test@test.com -phone_number +12345678
[server]$
问题是您的 UserAttributes 数组中的每个用户属性都需要一个字典。您只是在代码中用 phone 数字属性覆盖了电子邮件属性。
response = client.admin_create_user(
UserPoolId='eu-central-1_pDui4EwA8',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
},
{
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='RESEND',
DesiredDeliveryMediums=[
'EMAIL'
],
)
我正在尝试在我的 Cognito 用户池中创建一个新用户。我正在使用 admin-create() 电话。
这是我的脚本:
#!/usr/bin/env python3
import boto3
import argparse
client = boto3.client('cognito-idp')
parser = argparse.ArgumentParser()
parser.add_argument('-username', dest='username')
parser.add_argument('-email', dest='email')
parser.add_argument('-phone_number', dest='phone_number')
args = parser.parse_args()
response = client.admin_create_user(
UserPoolId='eu-central-aaaaaaa',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='RESEND',
DesiredDeliveryMediums=[
'EMAIL'
],
)
如您所见,MessageAction=
设置为 RESEND
。
我运行正在执行以下命令:cognito.py -username test -email test@test.com -phone_number +12345678
这是我遇到的错误:
botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameterException) when calling the AdminCreateUser operation: No email provided but desired delivery medium was Email
如果我尝试为用户使用 email_verified
或 phone_number_verified
属性,可能会重现类似的错误。如果我将它们设置为 true,我会收到错误消息,告诉我无法验证 email/phone 因为没有提供。但正如您可以清楚地看到的那样。
我想了解为什么我的论点没有得到认可。
奇怪的是,如果我将属性更改为 MessageAction='SUPPRESS'
,而且如果我不添加验证 email/phone 属性,那么用户将使用用户名、电子邮件创建phone 我通过了。
所以仅作为示例,这里是工作代码:
#!/usr/bin/env python3
import boto3
import argparse
client = boto3.client('cognito-idp')
parser = argparse.ArgumentParser()
parser.add_argument('-username', dest='username')
parser.add_argument('-email', dest='email')
parser.add_argument('-phone_number', dest='phone_number')
args = parser.parse_args()
response = client.admin_create_user(
UserPoolId='eu-central-aaaaaa',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='SUPPRESS',
DesiredDeliveryMediums=[
'EMAIL'
],
)
我可以再次运行命令,然后将创建用户:
cognito.py -username test -email test@test.com -phone_number +12345678
[server]$
问题是您的 UserAttributes 数组中的每个用户属性都需要一个字典。您只是在代码中用 phone 数字属性覆盖了电子邮件属性。
response = client.admin_create_user(
UserPoolId='eu-central-1_pDui4EwA8',
Username=args.username,
UserAttributes=[
{
'Name': 'email',
'Value': args.email,
},
{
'Name': 'phone_number',
'Value': args.phone_number,
},
],
# TemporaryPassword='',
ForceAliasCreation=False,
MessageAction='RESEND',
DesiredDeliveryMediums=[
'EMAIL'
],
)