Amazon web services Can';t通过AWS Cognito API重新发送验证代码
我有一个AWS Cognito用户池,其中用户是使用action通过Cognito的API创建的,效果很好。这会向用户发送一封验证电子邮件,其中包含一个临时密码。到目前为止还不错 现在,用户没有收到此验证电子邮件,因此我需要使用操作再次发送它。我正试图用下面的PHP代码实现这一点Amazon web services Can';t通过AWS Cognito API重新发送验证代码,amazon-web-services,amazon-cognito,Amazon Web Services,Amazon Cognito,我有一个AWS Cognito用户池,其中用户是使用action通过Cognito的API创建的,效果很好。这会向用户发送一封验证电子邮件,其中包含一个临时密码。到目前为止还不错 现在,用户没有收到此验证电子邮件,因此我需要使用操作再次发送它。我正试图用下面的PHP代码实现这一点 $userPoolId = '[POOL_ID_HERE]'; $backendAppId = '[APP_ID_HERE]'; $clientSecret = '[SECRET_HERE]'; $username =
$userPoolId = '[POOL_ID_HERE]';
$backendAppId = '[APP_ID_HERE]';
$clientSecret = '[SECRET_HERE]';
$username = '[UUID_HERE]';
$secretHash = base64_encode(hash_hmac('sha256', $username . $backendAppId, $clientSecret, true));
$cognitoIdp->resendConfirmationCode([
'ClientId' => $backendAppId,
'SecretHash' => $secretHash,
'Username' => $username,
]);
这给了我以下错误:
Aws/CognitoIdentityProvider/Exception/CognitoIdentityProviderException
在上执行“ResendConfirmationCode”时出现消息“错误”
""; AWS HTTP错误:
客户端错误:POSThttps://cognito-idp.eu-central-1.amazonaws.com
导致400错误请求
响应:
{uuuu type:“NotAuthorizedException”,“message:”无法重新发送
此用户的确认代码“}NotAuthorizedException(客户端):
无法为此用户重新发送确认代码-
{uuuu type:“NotAuthorizedException”,“message:”无法重新发送
此用户的确认代码“}”
我正在使用对用户池具有以下IAM权限的用户的凭据:
- cognito idp:AdminDeleteUser
- cognito idp:AdminCreateUser
- cognito idp:AdminAddUserToGroup
- cognito idp:重新发送确认代码
MessageAction
参数设置为RESEND
。这将迫使现有用户重新发送验证电子邮件,但如果我能让它工作,我更喜欢使用ResendConfirmationCode操作
有什么想法吗?谢谢 我知道,如果您的web应用程序最终用户在注册后由于某种原因没有收到确认码,您希望他们再次收到确认码,我也知道您收到的是“NotAuthorizedException”当您试图从使用PHP SDK的代码运行ResendConfirmationCode API调用时 ResendConfirmationCode API调用[1]可以在注册API调用[2]之后使用,并且它不是AdminCreateUser身份验证流的一部分,这就是引发错误的原因。AdminCreateUser API调用将新用户的状态更改为“强制更改密码状态”,并且在使用AdminCreateUser创建新用户后,ResendConfirmationCode调用或ForgotPassword调用都无法工作 如果希望最终用户再次获得确认代码,可以使用AdminCreateUser API调用本身,并在PHP代码的MessageAction中设置“重新发送”标志。根据我对Amazon Cognito的理解,在这个特定的用例中,没有其他方法可以再次发送验证消息。 根据官方文档,PHP中的API调用示例如下[3]:
$result = $client->adminCreateUser([
'DesiredDeliveryMediums' => ['<string>', ...],
'ForceAliasCreation' => true || false,
'MessageAction' => 'RESEND|SUPPRESS',
'TemporaryPassword' => '<string>',
'UserAttributes' => [
[
'Name' => '<string>', // REQUIRED
'Value' => '<string>',
],
// ...
],
'UserPoolId' => '<string>', // REQUIRED
'Username' => '<string>', // REQUIRED
'ValidationData' => [
[
'Name' => '<string>', // REQUIRED
'Value' => '<string>',
],
// ...
],
]);
$result=$client->adminCreateUser([
“DesiredDeliveryMedium”=>[“”,…],
“ForceAliasCreation”=>true | | false,
'MessageAction'=>'RESEND | SUPPRESS',
“临时密码”=>“”,
“用户属性”=>[
[
'Name'=>'',//必需
'值'=>'',
],
// ...
],
'UserPoolId'=>'',//必需
'用户名'=>'',//必需
“验证数据”=>[
[
'Name'=>'',//必需
'值'=>'',
],
// ...
],
]);
使用将“MessageAction”设置为“RESEND”后,最终用户应该能够在其终端再次接收验证消息
工具书类
[1]
[2]
[3] 我有一种感觉,这可能与此有关——这完全有道理。我用
adminCreateUser
操作对其进行了测试,这似乎很有效。谢谢!