我有一个 AWS Cognito 用户池,其中用户是使用AdminCreateUser操作通过 Cognito 的 API 创建的,它工作正常。这会向用户发送一封验证电子邮件,其中包含一个临时密码。到现在为止还挺好。
现在用户没有收到此验证电子邮件,因此我需要使用ResendConfirmationCode操作再次发送它。我试图用下面的 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,
]);
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
Aws/CognitoIdentityProvider/Exception/CognitoIdentityProviderException 带有消息“在“ https://cognito-idp.eu-central-1.amazonaws.com ”上执行“ResendConfirmationCode”时出错;AWS HTTP 错误:客户端错误:
POST https://cognito-idp.eu-central-1.amazonaws.com导致400 Bad Request响应:{"__type":"NotAuthorizedException","message":"无法为此用户重新发送确认代码"} NotAuthorizedException(客户端):无法为此重新发送确认代码用户 - {"__type":"NotAuthorizedException","message":"无法为该用户重新发送确认码"}'
我正在使用对用户池具有以下 IAM 权限的用户的凭据:
如果我使用IAM Policy Simulator测试权限,它会给我绿灯,说一切正常。据我所知,cognito-idp:ResendConfirmationCode操作应该足够了,因为在创建用户时发送验证电子邮件工作正常。
我在这里做错了什么?另一种方法是再次调用 AdminCreateUser 操作,将 …