概要

CognitoUserPoolの指定の既存ユーザーの電話番号を削除し、加えてphone_number_verifiedもfalseにするユースケースの紹介。

ソースコード

deleteUserPoolPhoneNumber を実行すると、指定のusernameユーザーの電話番号属性が削除されます。

const setUserMFAPreference = async (
  username,
  twoStepAuthentication,
  userPoolId
) =>
  new Promise((resolve) => {
    const params = {
      Username: username,
      UserPoolId: userPoolId,
      MFAOptions: [] 
    };
    if (twoStepAuthentication) {
      params.MFAOptions.push({
        AttributeName: 'phone_number',
        DeliveryMedium: 'SMS'
      });
    }
    cognitoIdentityServiceProvider.adminSetUserSettings(params, (err, data) => {
      if (err) {
        throw err;
      } else {
        console.log(
          'Set CognitoUserPool Multi-factor authentication :',
          username
        );
        resolve(data);
      }
    });
  });

const deleteUserPoolPhoneNumber = async (username, userPoolId) =>
  new Promise((resolve) => {
    setUserMFAPreference(username, false, userPoolId)
      .then(() => {
        const params = {
          UserAttributeNames: ['phone_number'], // phone_number_verifiedは自動的にfalseに変更されるので指定しない
          UserPoolId: userPoolId,
          Username: username
        };
        cognitoIdentityServiceProvider.adminDeleteUserAttributes(
          params,
          (err, data) => {
            if (err) {
              throw err;
            } else {
              resolve(data);
            }
          }
        );
      })
      .catch((e) => {
        throw e;
      });
  });

まとめ

Cognitoの認証実装方法を覚えるといろんなプラットフォームでも応用効くので、初学者はCognitoのSDK仕様を一度調べてみると良いだろうと思う。