

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定電子郵件或電話驗證
<a name="user-pool-settings-email-phone-verification"></a>

您可以在**身分驗證方法**選單下選擇電子郵件或電話驗證的設定。有關多重要素驗證 (MFA) 的詳細資訊，請參閱[簡訊 MFA](user-pool-settings-mfa-sms-email-message.md)。

Amazon Cognito 使用 Amazon SNS 以傳送 簡訊。如果您尚未從 Amazon Cognito 或任何其他 傳送 SMS 訊息 AWS 服務 ，Amazon SNS 可能會將您的帳戶放在 SMS 沙盒中。我們建議您先將測試訊息傳送到已驗證的電話號碼，然後再將帳戶從沙盒移至生產環境。此外，如果您打算將簡訊傳送至美國目的地電話號碼，必須向 Amazon Pinpoint 取得來源或寄件者 ID。若要為簡訊設定 Amazon Cognito 使用者集區，請參閱 [Amazon Cognito 使用者集區的簡訊設定](user-pool-sms-settings.md)。

Amazon Cognito 可以自動驗證電子郵件地址或電話號碼。若要進行此驗證，Amazon Cognito 會傳送驗證碼或驗證連結。如果是電子郵件地址，Amazon Cognito 會以電子郵件訊息傳送代碼或連結。您可以在 Amazon Cognito 主控台的訊息範本選單中編輯**驗證訊息**範本時，選擇**程式碼**或**連結**的驗證**類型**。 ****如需詳細資訊，請參閱[自訂電子郵件驗證訊息](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization)。

如果是電話號碼，Amazon Cognito 會以簡訊傳送驗證碼。

Amazon Cognito 必須驗證電話號碼或電子郵件地址以確認使用者，並協助使用者恢復忘記的密碼。或者，您也可以利用預先註冊 Lambda 觸發程序或 [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) API 操作來自動確認使用者。如需詳細資訊，請參閱[註冊及確認使用者帳戶](signing-up-users-in-your-app.md)。

驗證碼或連結的有效時間為 24 小時。

如果您選擇要求驗證電子郵件地址或電話號碼，Amazon Cognito 會在使用者註冊時自動傳送驗證碼或連結。如果使用者集區具有 [自訂 SMS 寄件者 Lambda 觸發程序](user-pool-lambda-custom-sms-sender.md) 或 [自訂電子郵件寄件者 Lambda 觸發程序](user-pool-lambda-custom-email-sender.md)，將會改為叫用該函數。

**備註**  
Amazon SNS 會針對其用於驗證電話號碼的簡訊部分另外收費。傳送電子郵件訊息是免費的。如需 Amazon SNS 定價的相關資訊，請參閱[全球 SMS 定價](https://aws.amazon.com/sns/sms-pricing/)。如需可使用 SMS 簡訊的國家/地區最新清單，請參閱[支援的區域和國家](https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html)。
當您在應用程式中測試從 Amazon Cognito 產生電子郵件的動作時，請使用 Amazon Cognito 能夠送達而不致發生硬退信狀況的真實電子郵件地址。如需詳細資訊，請參閱[在測試應用程式時傳送電子郵件](signing-up-users-in-your-app.md#managing-users-accounts-email-testing)。
忘記密碼流程需要使用者的電子郵件或電話號碼以驗證使用者。

**重要**  
如果使用者同時使用電子郵件地址和電話號碼來進行註冊，而您的使用者集區設定要求這兩個屬性都要驗證，Amazon Cognito 會透過簡訊將驗證碼傳送至該電話號碼。Amazon Cognito 尚未驗證電子郵件地址，因此您的應用程式必須呼叫 [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)，查看是否有電子郵件地址正在等待驗證。如果確實需要驗證，應用程式必須呼叫 [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) 以啟動電子郵件驗證流程。然後它必須藉由呼叫 [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) 提交驗證碼。

您可以調整 AWS 帳戶 和個別訊息的簡訊花費配額。這些限制僅適用於傳送簡訊的成本。如需詳細資訊，請參閱 [Amazon SNS 常見問答集](https://aws.amazon.com/sns/faqs/)中的**什麼是帳戶層級與訊息層級費用配額及其運作方式？**。

Amazon Cognito 會在 AWS 區域 您建立使用者集區的 中使用 Amazon SNS 資源，或在**舊版 Amazon SNS 替代區域中**從下表傳送簡訊。亞太 (首爾) 區域的 Amazon Cognito 使用者集區除外。這些使用者集區使用您在亞太 (東京) 區域的 Amazon SNS 組態。如需詳細資訊，請參閱[選擇 SMS 訊息 AWS 區域 的](user-pool-sms-settings.md#sms-choose-a-region)。


| Amazon Cognito 區域 | 舊式 Amazon SNS 備用區域 | 
| --- | --- | 
| 美國東部 (俄亥俄) | 美國東部 (維吉尼亞北部) | 
| 亞太地區 (孟買) | 亞太地區 (新加坡) | 
| 亞太地區 (首爾) | 亞太地區 (東京) | 
| 加拿大 (中部) | 美國東部 (維吉尼亞北部) | 
| 歐洲 (法蘭克福) | 歐洲 (愛爾蘭) | 
| 歐洲 (倫敦) | 歐洲 (愛爾蘭) | 

**範例**：如果您的 Amazon Cognito 使用者集區位於亞太區域 (孟買)，而且已在 ap-southeast-1 區域增加支出限制，那麼您可能不希望個別請求增加 ap-south-1 的支出限制。反之，您可以使用亞太區域 (新加坡) 的 Amazon SNS 資源。

## 驗證對電子郵件地址和電話號碼的更新
<a name="user-pool-settings-verifications-verify-attribute-updates"></a>

在使用者變更電子郵件地址或電話號碼屬性值後，該屬性會立即變為作用中且未驗證。Amazon Cognito 還會要求您的使用者在 Amazon Cognito 更新屬性之前先驗證新值。當您要求使用者先驗證新值時，他們可以使用原始值登入與接收訊息，直到他們驗證新值為止。

當使用者可以將其電子郵件地址或電話號碼作為您使用者集區中的登入別名時，已更新屬性的登入名稱取決於您是否要求驗證已更新的屬性。當您要求使用者驗證已更新的屬性時，使用者可以使用原始屬性值登入，直到他們驗證新值為止。如果您不要求使用者驗證已更新的屬性，則使用者無法以新的或原始屬性值登入或接收訊息，直到他們驗證新值為止。

例如，您的使用者集區允許以電子郵件地址別名登入，且要求使用者在更新時驗證其電子郵件地址。Sue 使用 `sue@example.com` 登入，她想要將電子郵件地址變更為 `sue2@example.com`，但不小心輸入成 `ssue2@example.com`。Sue 沒有收到驗證電子郵件，因此無法驗證 `ssue2@example.com`。Sue 使用 `sue@example.com` 登入，並在您的應用程式中重新提交表單，將其電子郵件地址變更為 `sue2@example.com`。她收到此電子郵件，將驗證碼提供給您的應用程式，並開始使用 `sue2@example.com` 登入。

**當使用者更新屬性且您的使用者集區驗證新屬性值時**
+ 他們可以在確認代碼以驗證新值之前，使用原始屬性值登入。
+ 他們只能在確認代碼以驗證新值之後，使用新屬性值登入。
+ 如果您在 [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 請求中將 `email_verified` 或 `phone_number_verified` 設定為 `true`，則他們可以在確認 Amazon Cognito 傳送給他們的代碼之前登入。

**當使用者更新屬性，但您的使用者集區未驗證新屬性值時**
+ 他們無法使用原始屬性值登入或接收訊息。
+ 在確認代碼以驗證新值之前，他們無法使用新屬性值登入或接收確認碼以外的訊息。
+ 如果您在 [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 請求中將 `email_verified` 或 `phone_number_verified` 設定為 `true`，則他們可以在確認 Amazon Cognito 傳送給他們的代碼之前登入。

## 要求使用者更新其電子郵件地址或電話號碼時需要驗證屬性


1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。如果出現提示，請輸入您的 AWS 登入資料。

1. 在導覽窗格中，選擇 **User Pools** (使用者集區)，然後選擇您要編輯的使用者集區。

1. 在**註冊**功能表中，選擇**屬性驗證和使用者帳戶確認**下的**編輯**。

1. 選擇 **Keep original attribute value active when an update is pending** (當更新待處理時，保持原始屬性值處於作用中)。

1. 在 **Active attribute values when an update is pending** (更新待處理時的作用中屬性值) 下方，選擇您希望在 Amazon Cognito 更新值之前要求使用者驗證的屬性。

1. 選擇**儲存變更**。

如欲要求使用 Amazon Cognito API 進行屬性更新驗證，您可以設定 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) 請求中的 `AttributesRequireVerificationBeforeUpdate` 參數。

## 授權 Amazon Cognito 代表您傳送 SMS 訊息
<a name="user-pool-settings-verifications-iam-role-for-sms"></a>

Amazon Cognito 需要您的許可，才能代表您傳送簡訊給使用者。若要授予該許可，您可以建立 AWS Identity and Access Management (IAM) 角色。在 SMS 下的 Amazon Cognito 主控台的**身分驗證方法**選單中，選擇**編輯**以設定角色。