Amplify SDKのAuthでdeleteUserAttributeする

AWS Amplify Advent Calendar 2020、25日目の記事です。

そういえば紹介していなかったなと思ったTipsがあったので、まとめてみました。

Amplify SDKのAuthにはユーザー属性を消すメソッドがない

はい。書いての通りです。

Authクラスを使ってユーザー属性を追加・更新するには、Auth.updateUserAttributesを使えばOKです。

const updateCognitoUserAttribute = async (key: string, value: string) => {
  const user = await Auth.currentAuthenticatedUser();
  return Auth.updateUserAttributes(user, {
    [key]: value,
  });
};

// もしくは
const updateCognitoUserAttributes = async (attributes: {[key: string]: string}) => {
  const user = await Auth.currentAuthenticatedUser();
  return Auth.updateUserAttributes(user, attributes);
};

ですが、deleteUserAttributesは存在しなかったりします。

ユーザー属性の削除は、Cognito Userクラスから

ではどうやって属性を消すかですが、Cognito Userのクラスを利用します。

export const deleteUserAttributes = async (...keys: string[]) => {
    const user = await Auth.currentAuthenticatedUser();
    return new Promise((resolve, reject) => {
        return user.deleteAttributes(keys, (err, result) => {
            if (err) {
                return reject(err)
            } else {
                return resolve(result)
            }
        })
    })

}

こんな関数を書いておけば、PromiseやGeneratorでも使えるでしょう。

いつから?

Issueを見ていると、2019年の4月時点でこの指摘をしている人がいたみたいです。

意外とみんな困ってなかったのか、Cognito側でいけるから気にしてなかったのか・・・(自分は後者)

なぜ今更触れた?

「そういえばこれコアにあった方がいいよね」と思ったので、Pull Requestを作るだけ作ってみました。

feat: delete user attributes #7342

大きいPJだとマージされるまで時間がかかることがままある印象ですが、アドベントカレンダーとかで目に付く場所に書いてみるとなにか起きないかなぁという若干の下心でこの記事を書いています。

マージされれば、この記事にあるようなラッパーは不要になりますし、rejectされたらされたで上の処理を各自で使い続けようということになりますね。

Comment