如何解決 Amazon Cognito 使用者的 email_verified 屬性問題?

2 分的閱讀內容
0

我想要解決 Amazon Cognito 使用者的 email_verified 屬性的任何問題。

簡短描述

Amazon Cognito 使用者集區具有一組標準屬性,可用於識別個別使用者。email_verified 屬性指示是否已驗證使用者的電子郵件地址可能會在下列情況下變更:

  • 使用者更新其電子郵件地址。當使用者更新其電子郵件地址時,Amazon Cognito 會將 email_verified 屬性變更為未驗證。
  • 電子郵件地址設定為別名。然後會建立具有重複電子郵件地址的使用者。將電子郵件地址設定為別名時,只有一位使用者可以將電子郵件地址值保留為 email_verified 屬性。如果較新使用者的帳戶確認成功,則會將電子郵件地址別名傳輸給較新的使用者。前使用者的電子郵件地址則未經驗證。如需詳細資訊,請參閱使用者集區屬性並檢閱自訂登入屬性一節。
  • 聯合身分使用者,或連結至聯合身分使用者的使用者將使用電子郵件映射登入。當聯合身分使用者登入時,您的使用者集區需要的每個使用者集區屬性都必須具有映射。如果映射了電子郵件屬性,email_verified 屬性預設會變更為「未驗證」

解決方案

若要解決 email_verified 屬性問題,請遵循適用於您情況的步驟進行操作。

**重要事項:**在以下範例 AWS Command Line Interface (AWS CLI) 命令中,用您的值取代範例字串的所有執行個體。(例如,用您的存取字符值取代 "example_access_token")

電子郵件地址更新後的驗證

若要在使用者更新後驗證電子郵件地址:

1.    若要讓 Amazon Cognito 將驗證碼傳送至更新的電子郵件地址,請針對使用者集區進行電子郵件驗證設定

2.    如有必要,請呼叫 UpdateUserAttributes API 或 AdminUpdateUserAttributes API 來更新電子郵件地址。

update-user-attributes 命令範例:

aws cognito-idp update-user-attributes --access-token "example_access_token" --user-attributes Name="email",Value="example_new_email"

admin-update-user-attributes 命令範例:

aws cognito-idp admin-update-user-attributes --user-pool-id "example_user_pool_id" --username "example_username" --user-attributes Name="email",Value="example_new_email"

**重要事項:**透過將 email_verified 屬性設定為 TrueAdminUpdateUserAttributes API 也可以用於自動驗證電子郵件。如果使用 AdminUpdateUserAttributes API 自動驗證電子郵件地址,則不必執行下一個步驟。使用 UpdateUserAttributes API 時,則下一步是必要的。

3.    請檢查您的新電子郵件收件匣以獲取驗證碼。

4.    呼叫 VerifyUserAttribute API。指定 AccessTokenAttributeName"email",然後輸入上一步的驗證碼。

verify-user-attribute 命令範例:

aws cognito-idp verify-user-attribute --access-token "example_access_token" --attribute-name "email" --code "example_verification_code"

若要在初始代碼到期後驗證電子郵件地址:

1.    使用您的使用者名稱登入應用程式,以擷取您的存取字符。

2.    呼叫 GetUserAttributeVerificationCode API。將 AttributeName 參數設定為 "email"

get-user-attribute-verification-code 命令範例:

aws cognito-idp get-user-attribute-verification-code --access-token "example_access_token" --attribute-name "email"

3.    呼叫 VerifyUserAttribute API。指定 AccessTokenAttributeName"email" 的參數。輸入上一步的驗證碼。

使用重複的電子郵件地址確認新使用者

若要允許確認具有重複電子郵件地址的新使用者:

1.    如有必要,請呼叫 SignUp API 以使用已設定的電子郵件地址註冊使用者。

sign-up 命令範例:

aws cognito-idp sign-up --client-id "example_client_id" --username "example_username" --password "example_password" --user-attributes Name="email",Value="example_user_email"

2.    呼叫 ConfirmSignUp API 並將 ForceAliasCreation 參數設定為 True

confirm-sign-up 命令範例:

aws cognito-idp confirm-sign-up --client-id "example_client_id" --username "example_username" --confirmation-code "example_confirmation_code" --force-alias-creation

若要在註冊後拒絕確認具有重複電子郵件地址的新使用者,請執行下列步驟:

1.    呼叫 ConfirmSignUp API 並將 ForceAliasCreation 參數設定為 False

**注意:**ForceAliasCreation 預設為 False。因此,不需要作為請求中的參數傳遞。

deny-sign-up 命令範例:

aws cognito-idp confirm-sign-up --client-id "example_client_id" --username "example_username" --confirmation-code "example_confirmation_code" --no-force-alias-creation

2.    藉由將 ForceAliasCreation 參數設定為 False,API 會傳回下列錯誤:

An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

以系統管理員身分建立具有重複電子郵件地址的新使用者

若要以系統管理員身分建立具有重複電子郵件地址的新使用者︰

1.    使用已設定的電子郵件地址呼叫 AdminCreateUser API ,將 email_verified 屬性設定為 True,並將 ForceAliasCreation 參數設定為 True

admin-create-user 命令範例:

aws cognito-idp admin-create-user --user-pool-id "example_user_pool_id" --username "example_username" --user-attributes Name="email",Value="example_user_email" Name="email_verified",Value="True" --force-alias-creation

將 email_verified 屬性映射至第三方身分提供者 (IdP)

若要在聯合後使 email_verified 屬性經過驗證:

1.    從 Amazon Cognito 主控台將驗證狀態的 IdP 屬性映射email_verified 屬性。

**注意:**大多數 OpenID Connect (OIDC) 提供者包含 email_verified 屬性。


相關資訊

驗證電子郵件地址和電話號碼的更新

AWS 官方
AWS 官方已更新 1 年前