もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

cognitoでsignup後、smsのcode認証

はじめに

こんばんは。

最近 cognitoを使って、認証等を勉強中です。

そんな中で流れでsignupして code認証する流れをphpで作ってたので、備忘録で残しておきます。

本題

登録

        $client = new CognitoIdentityProviderClient([
                'version'     => env('AWS_COGNITO_VERSION'),
                'region'      => env('AWS_DEFAULT_REGION'),
                'credentials' => [
                    'key'    => env('AWS_ACCESS_KEY_ID'),
                    'secret' => env('AWS_SECRET_ACCESS_KEY'),
                ]
        ]);


        $result = $client->signUp([
            'ClientId'       => env('AWS_COGNITO_APP_CLIENT_ID'),
            'Username'       => $email,
            'Password'       => $password,
            'UserAttributes' => [
                ['Name' => 'email', 'Value' => $email],
                ['Name' => 'phone_number', 'Value' => "+81{$phoneNumber}"],
            ]
        ]);

SMS認証

        $client = new CognitoIdentityProviderClient([
                'version'     => env('AWS_COGNITO_VERSION'),
                'region'      => env('AWS_DEFAULT_REGION'),
                'credentials' => [
                    'key'    => env('AWS_ACCESS_KEY_ID'),
                    'secret' => env('AWS_SECRET_ACCESS_KEY'),
                ]
        ]);


        $result = $client->confirmSignUp([
            'ClientId'  => env('AWS_COGNITO_APP_CLIENT_ID'),
            'Username' => $username,
            'ConfirmationCode' => $code,
        ]);

これでcognito側も問題なく登録できます。

ただ、SMS認証だから emailの属性だけは 未検証 のまま

signup時に email_verified をtrueにして登録しようとするとエラーが出るので、これはこのままになってしまうのかな...?

終わりに

コード認証は似たような名前のAPIがあるから悩みましたが、なんとかできてよかったです。

現場からは以上です。