当使用AWS Cognito的FORCE_CHANGE_PASSWORD选项时,并且email_verified为true时,用户将收到一封包含临时密码的电子邮件。然而,使用此临时密码登录后会出现“无法使用临时密码登录”的错误消息。此错误是由于Cognito设置了需要新密码,以确保安全性。以下是一个示例代码片段,可以在用户登录时捕获此错误并将新密码发送到Cognito:
try:
response = client.initiate_auth(
AuthFlow='USER_PASSWORD_AUTH',
AuthParameters={
'USERNAME': username,
'PASSWORD': password,
},
ClientId='1234567890123'
)
# Successful login
except botocore.exceptions.ClientError as error:
if error.response['Error']['Code'] == 'NotAuthorizedException' and error.response['Error']['Message'] == 'User password has expired':
# User needs to set new password
try:
response = client.admin_set_user_password(
UserPoolId='us-west-2_abcdefghi',
Username=username,
Password=new_password,
Permanent=True
)
# New password set successfully
except botocore.exceptions.ClientError as error:
# Error setting new password
print(error)
else:
# Other login error
print(error)