概要

サインアップ直後のユーザープールのユーザーは、パスワード変更要求状態となり、初回サインイン時にパスワード変更を要求されます。ただ、管理者でユーザーをサインアップさせる際に、すぐにサインアップ可能状態にしたいケースがしばしばあります。

adminSetUserPasswordを使用してユーザーのパスワードを一度更新

createUser関数を実行後に、setAdminPasswordを実行すると該当ユーザーはCONFIRMEDとなり、ユーザーはサインイン可能状態となります。
どうぞコピペでご利用ください〜👍

/**
 * Cognitoへのユーザーの作成
 * @param username
 * @param password
 * @param phoneNumber
 * @param userPoolId
 * @returns {Promise<void>}
 */
const createUser = async (username, password, phoneNumber, userPoolId) => {
  const params = {
    UserPoolId: userPoolId,
    Username: username,
    TemporaryPassword: password
  };
  if (phoneNumber) {
    _.assign(params, {
      UserAttributes: [
        {
          Name: 'phone_number',
          Value: phoneNumber
        },
        {
          Name: 'phone_number_verified',
          Value: 'true'
        }
      ],
      MessageAction: 'SUPPRESS'
    });
  }
  const res = await cognitoIdentityServiceProvider
    .adminCreateUser(params)
    .promise();
  console.log('Created CognitoUserPool', res);
  await res;
};

/**
 * ユーザーのパスワードを確定(CONFIRMEDへ強制的に移行)
 * @param username
 * @param password
 * @param userPoolId
 * @returns {Promise<void>}
 */
const setAdminPassword = async (username, password, userPoolId) => {
  const params = {
    Password: password,
    UserPoolId: userPoolId,
    Username: username,
    Permanent: true
  };
  await cognitoIdentityServiceProvider.adminSetUserPassword(params, function (
    err,
    data
  ) {
    if (err) {
      throw err;
    }
    console.log('adminSetUserPassword CognitoUserPool', params);
    return data;
  });
};

余談

まぁ本来はパスワードを第三者が知ること自体よくないので、ユーザー自身にパスワードを入力させるようにしましょう。Cognitoのデフォルト設定に則りSDK利用することで、セキュア認証を簡単に構築できます。