CognitoではAdminUpdateUserAttributesでサーバサイドからユーザの属性を変更できるが、実は検証が必要な属性(Email属性など)は上記コマンドを実行してからCognitoのユーザプールを見ても、Emailが追加・変更されていないように見える。

TypeScriptでCognitoユーザの属性を変更する方法

属性変更時に送信された6桁の認証コードをUIで入力して初めて検証OKになり、ユーザプールにも属性が表示されるようになる。

どういうことかというと、実は内部的にemail_verifiedという属性があり、ここにtrueが設定されないとemail属性は有効にならない。

aws-cliではどう見えるのか

  • 認証前

    $ aws cognito-idp list-users --user-pool-id ap-northeast-1_xxxxxx
     
    {
                "Username": "9674DFA4-51DF-4D67-98E0-CBAD79D0E889",
                "Attributes": [
                    {
                        "Name": "sub",
                        "Value": "0BF17B9A-E362-48B0-A8AF-3AFBA6C0486C"
                    }
                ],
                "UserCreateDate": "2024-01-25T10:19:17.949000+09:00",
                "UserLastModifiedDate": "2024-01-25T10:21:44.216000+09:00",
                "Enabled": true,
                "UserStatus": "CONFIRMED"
            },
  • 認証後

    {
                "Username": "9674DFA4-51DF-4D67-98E0-CBAD79D0E889",
                "Attributes": [
                    {
                        "Name": "sub",
                        "Value": "0BF17B9A-E362-48B0-A8AF-3AFBA6C0486C"
                    },
                    {
                        "Name": "email_verified",
                        "Value": "true"
                    },
                    {
                        "Name": "email",
                        "Value": "example@gmail.com"
                    }
                ],
                "UserCreateDate": "2024-01-25T10:19:17.949000+09:00",
                "UserLastModifiedDate": "2024-01-25T10:26:03.312000+09:00",
                "Enabled": true,
                "UserStatus": "CONFIRMED"
            },

    検証されるとemailとemail_verified属性が同時に追加されるもよう。