為什麼 Amazon Cognito 未使用 ForgotPassword API 呼叫傳送驗證碼電子郵件或簡訊?
我想知道為什麼當我使用 ForgotPassword API 呼叫時,Amazon Cognito 沒有傳送驗證碼電子郵件或簡訊 (SMS)。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
檢查垃圾郵件和垃圾資料夾
確認驗證電子郵件沒有進入使用者的垃圾郵件或垃圾資料夾。
確認該使用者存在於使用者集區中
確認該使用者存在於 Amazon Cognito 使用者集區中。若要使用 Amazon Cognito 主控台在使用者集區中搜尋使用者,請參閱管理和搜尋使用者帳戶。您也可以使用 AdminGetUser API 呼叫。
檢查使用者的狀態
確認使用者的狀態不是 FORCE_CHANGE_PASSWORD。
在管理員建立的使用者使用提供的密碼登入之前,使用者狀態預設為 FORCE_CHANGE_PASSWORD。
如果使用者狀態為 FORCE_CHANGE_PASSWORD,則使用者無法使用 ForgotPassword API 呼叫,且不會收到驗證碼。而 Amazon Cognito 會提示使用者變更密碼。
復原使用者的 AWS 帳戶
如果您在使用者名稱與電話號碼尚未驗證時呼叫 ForgotPassword API,您會收到以下其中一個錯誤:
- 在 AWS CLI 中:
「An error occurred (InvalidParameterException) when calling the ForgotPassword operation: Cannot reset password for the user as there is no registered/verified email or phone_number」 - 在 Amazon Cognito 主控台中:
「Could not reset password for the account, please contact support or try again.」
若要復原使用者的帳戶,您必須驗證使用者帳戶組態。查看復原訊息傳送方式是否為電子郵件、電話、僅電子郵件、僅電話、如果有電話則使用電話,或是無。
請完成下列步驟:
- 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 選取使用者集區。
- 在 Authentication (驗證)下,選擇 Sign-in (登入)。
- 在 User account recovery (使用者帳戶復原) 區段中,勾選 Recovery message delivery method (復原訊息傳遞方法) 下的選項。然後,確認傳送方式是使用者的已驗證屬性。
- 確認傳送方式是使用者的已驗證屬性。
處於已確認狀態的使用者可能沒有用於復原密碼的已驗證電子郵件或電話號碼。當您選取驗證核取方塊以建立帳戶時,您必須驗證管理員所建立使用者帳戶的電子郵件和電話號碼。
若要解決此問題,請使用以下其中一種方法,將您的電子郵件與電話號碼的已驗證狀態設為 true:
更新使用者屬性
如果您是管理員,請執行以下 AdminUpdateUserAttributes API 呼叫:
aws cognito-idp admin-update-user-attributes --user-attributes Name=example-verification-method,Value=true --user-pool-id example-userpoolID --username example-user-name
**注意:**將 example-verification-method 替換為 email_verified 或 phone_number_verified,視使用者的復原訊息傳送方式而定。將 example-userpoolID 替換為您的使用者集區 ID,並將 example-user-name 替換為想要執行 ForgotPassword API 呼叫的使用者名稱。
如果您是使用者,請登入,然後執行以下 UpdateUserAttributes API 呼叫:
aws cognito-idp update-user-attributes --user-attributes Name=example-verification-method,Value=true --access-token example-access-token
**注意:**將 example-verification-method 替換為 email_verified 或 phone_number_verified,視使用者的復原訊息傳送方式而定。將 example-access-token 替換為您的存取權杖值。
預先註冊 Lambda 觸發程序
使用預先註冊 Lambda 觸發程序來將使用者的電子郵件與電話號碼屬性設為已驗證。
SignUp
如果您是使用者,請完成以下步驟:
- 執行以下 SignUp API 呼叫:
**注意:**將 example-client-ID 替換為您想註冊之應用程式用戶端的 ID。將 example-user-name 替換為您的使用者名稱。aws cognito-idp sign-up --client-id example-client-ID --username example-user-name - 記下前一個命令輸出中的工作階段值。
- 執行以下 ConfirmSignUp API 呼叫:
注意:將 example-client-ID 替換為您想註冊之應用程式用戶端的 ID。將 example-user-name 替換為您的使用者名稱。將 example-confirmation-code 替換為您在步驟 2 中記下的工作階段值。aws cognito-idp confirm-sign-up --client-id example-client-ID --username example-user-name --confirmation-code example-confirmation-code
如果您是管理員,請執行以下 AdminConfirmSignUp API 呼叫:
aws cognito-idp admin-confirm-sign-up --client-id example-client-ID --username example-user-name
**注意:**將 example-client-ID 替換為應用程式用戶端的 ID。將 example-user-name 替換為使用者名稱。
檢查簡訊傳送的帳戶支出限制
Amazon Cognito 會使用 Amazon Simple Notification Service (Amazon SNS) 傳送簡訊。如果您設定的帳戶支出配額超過帳戶支出限制,Amazon SNS 將不會發佈簡訊。
若要檢查或變更帳戶支出限制,請參閱使用 AWS 管理主控台設定簡訊傳送偏好設定。
檢查 Amazon SES 配額
Amazon Cognito 使用 Amazon Simple Email Service (Amazon SES) 傳送電子郵件。預設情況下,Amazon Cognito 可讓您的使用者集區每天傳送有限數量的電子郵件。如需詳細資訊,請參閱資源數量和大小配額。
若要設定更高的電子郵件傳送限制,您可以將使用者集區設定為使用 Amazon SES 電子郵件組態。如需說明,請參閱 Amazon Cognito 使用者集區的電子郵件設定。
使用 AdminSetUserPassword API 呼叫重設使用者密碼
管理員可以使用 AdminSetUserPassword API 呼叫,將 Amazon Cognito 使用者集區中使用者的密碼設定為暫時性或永久性。擁有臨時密碼的使用者必須在臨時密碼過期之前登入,並變更臨時密碼。使用者重設臨時密碼或密碼為永久密碼後,狀態會變成已確認。
相關資訊
- 語言
- 中文 (繁體)

相關內容
AWS 官方已更新 1 年前