Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Can';t通过AWS Cognito API重新发送验证代码_Amazon Web Services_Amazon Cognito - Fatal编程技术网

Amazon web services Can';t通过AWS Cognito API重新发送验证代码

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 =

我有一个AWS Cognito用户池,其中用户是使用action通过Cognito的API创建的,效果很好。这会向用户发送一封验证电子邮件,其中包含一个临时密码。到目前为止还不错

现在,用户没有收到此验证电子邮件,因此我需要使用操作再次发送它。我正试图用下面的PHP代码实现这一点

$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:重新发送确认代码
如果我使用测试权限,它会给我开绿灯,表示一切正常。据我所知,cognito idp:ResendConfirmationCode操作应该足够了,因为在创建用户时发送验证电子邮件工作正常

我做错了什么?另一种方法是再次调用AdminCreateUser操作,将
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
操作对其进行了测试,这似乎很有效。谢谢!