我在使用AWS CognitoIDP时遇到了一些麻烦。正如发布的here一样,我已经将preferred_username
设置为别名,但是在注册用户并设置他/她的preferred_username后,我无法使用密码登录。
我创建了一个带有preferred_username和用户名作为内部UUID字符串的用户。该用户反映在cognito用户池中,并使用preSignUp触发器进行确认。
注册模块:
def sign_up(self, uuid_username, username, password):
self.cognito_client.sign_up(
ClientId=self.cpcid,
SecretHash=self.get_secret_hash(uuid_username),
Username=uuid_username,
Password=password
)
user_attributes = [
{
'Name': CognitoAttr.PREFERRED_USERNAME.value,
'Value': username
}
]
self.cognito_client.admin_update_user_attributes(
UserPoolId=self.cpid,
Username=username,
UserAttributes=user_attributes
)
return
登录模块:
def sign_in(self, username, password, handle_exception=True, **kwargs):
"""
:param username: preferred_username/username of user
:param password: password of user
:param handle_exception: if false, raises cognito exception
:param kwargs:
:return:
"""
try:
LOGGER.info("Initiate Auth Started")
response = self.cognito_client.initiate_auth(
AuthFlow='USER_PASSWORD_AUTH', # with CUSTOM_AUTH, it's working because of defineAuth trigger
AuthParameters={
'USERNAME': username,
'PASSWORD': password,
'SECRET_HASH': self.get_secret_hash(username)
},
ClientId=self.cpcid,
)
LOGGER.info("Initiate Auth Ended")
return self.encrypt_cognito_tokens(
response["AuthenticationResult"]
)
except ClientError as err:
if not handle_exception:
raise err
return self.handle_boto3_exception(err)
不起作用:
上下文:USER_PASSWORD_AUTH流和登录名(boto3的initiate_auth)以及preferred_username
作为密码输入到username
参数。
错误:NotAuthorizedException:调用InitiateAuth操作时发生错误(NotAuthorizedException):错误的用户名或密码。
工作:
上下文:设置一个defineAuthLambda
函数,将issueTokens
设置为True,并使用CUSTOM_AUTH
流登录(boto3的initiate_auth),得到{{ 1}}或preferred_username
作为用户名的输入(给出令牌响应)。
此外,Cognito boto3的username
还返回使用用户名和Preferred_username的响应。
有人可以帮我解决我可能做错的事情吗?