我想要在 Amazon Cognito 中復原使用者密碼。
解決方案
可採用兩種方法在 Amazon Cognito 中復原使用者密碼:
- 透過驗證的電子郵件或電話號碼。
- 透過使用者密碼,透過管理員。
電子郵件或電話號碼驗證
您可以使用 ForgotPassword API 命令來復原使用者密碼。ForgotPassword API 命令會將復原程式碼傳送至驗證的電子郵件或驗證的電話號碼。復原程式碼的有效期為一小時。然後,使用 ConfirmForgotPassword API 命令來輸入重設密碼的確認碼。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本。
AWS CLI 命令:
ForgotPassword
aws cognito-idp forgot-password --client-id 38fjsnc484p94kpqsnet7mpld0 --username jane@example.com
輸出:
{
"CodeDeliveryDetails": {
"Destination": "j***@e***.com",
"DeliveryMedium": "EMAIL",
"AttributeName": "email"
}
}
ConfirmForgotPassword
aws cognito-idp confirm-forgot-password --client-id 3n4b5urk1ft4fl3mg5e62d9ado --username=diego@example.com --password PASSWORD --confirmation-code CONF_CODE
**注意:**如果您同時滿足下列兩項要求,則必須在 CLI 命令中傳遞 --secret-hash:
- AWS CLI 命令將 --client-id 做為參數。
- 應用程式用戶端設定一個機密。
若要計算應用程式用戶端的密碼雜湊,請參閱[如何對 Amazon Cognito 使用者集區 API 的 "Unable to verify secret hash for client
"(無法驗證用戶端 <client-id> 的機密雜湊)錯誤進行疑難排解?](https://repost.aws/zh-Hant/knowledge-center/cognito-unable-to-verify-secret-hash)
管理員重設
**注意:**如果您不是管理員,則請聯絡您的管理員以完成下列動作。
當您呼叫 AdminResetUserPassword API 命令時,目前的密碼會失效,而且您必須加以變更。如果使用者在呼叫 API 命令後嘗試登入,應用程式會執行下列動作:
- 重新取得 PasswordResetRequiredException。
- 引導使用者透過忘記密碼流程來重設密碼。
此外,如果出現以下情況,呼叫 API 會導致向使用者傳送帶有程式碼的訊息以變更其密碼:
- 使用者集區已設定電話驗證,且
- 使用者經驗證的電話號碼或電子郵件已存在。
AWS CLI 命令:
AdminResetUserPassword
aws cognito-idp admin-reset-user-password --user-pool-id us-west-2_aaaaaaaaa --username diego@example.com
ConfirmForgotPassword
aws cognito-idp confirm-forgot-password --client-id 3n4b5urk1ft4fl3mg5e62d9ado --username diego@example.com --password PASSWORD --confirmation-code CONF_CODE
AdminSetUserPassword
身為管理員,您還可以使用 AdminSetUserPassword API 命令,在使用者集區中呼叫使用者的密碼。密碼可以是暫時的,也可以是永久的。如果是暫時的,則使用者狀態會進入 FORCE_CHANGE_PASSWORD 狀態。當您登入後,InitiateAuth/AdminInitiateAuth 回應會包含 NEW_PASSWORD_REQUIRED 質詢。如果您沒有在密碼到期前登入,則無法登入,而且必須重設密碼。設定新密碼之後,或如果密碼為永久密碼,則使用者狀態會設定為 CONFIRMED (已確認)。
aws cognito-idp admin-set-user-password --user-pool-id us-west-2_aaaaaaaaa --username diego@example.com --password Hello@123 --permanent