同じ電話番号のユーザが複数同時に作られてしまう
Usernameに電話番号を指定して、SignUpAPIを一度しか叩いていないのに、
ユーザープールのコンソールでその電話番号を検索するとなぜか複数のアカウントが出現!
という事象に遭遇しました。
これをAWSのサポートに問い合わせたところ、現在かかえるバグなのだそうです。
ちなみに、そのユーザープールはサインアップ前のトリガーでLambdaをつかってゴニョゴニョしていたため、
トリガーの設定によるものかと尋ねたところ、それは関係なく確認されているそうです。
(明確にサポート側からバグだと明言されたのは私には初めての体験でした!)
知っておこう
こういう事象が発生するということを認識していないと、電話番号が一意であるという前提でシステムを組んでいる場合に問題が発生します。
この挙動を知っていれば一意にするために何か別の処理を加えることで対応はできますね。
具体例
私が最初に遭遇したのは以下のような設定のユーザープールでした。
- 電話番号でログイン
- 電話番号の検証プロセスを別で用意
- トリガー(Lambda)内でユーザの電話番号を検証済みにする
この状態で
aws cognito-idp sign-up --client-id ************** --username "+81**********" --password "************"
これを打つと、稀に同じ電話番号のユーザが複数できているのでした。
挙動
同じ電話番号のアカウントが複数存在する場合の挙動を以下に記します。
- ログイン(InitiateAuth)をすると、一番初めに登録されたアカウントの情報が返される
- 電話番号を指定してDeleteUserを行うと、一番初めに登録されたアカウントが削除される
- アカウント1つを削除後にログイン(InitiateAuth)しても、エラーになりユーザ情報は返されない
- 削除についても同様
- アカウント1つを削除後に、同じ電話番号でサインアップ(新規登録)すると登録できる
通常、上記の設定だとAという電話番号のアカウントが存在する場合に、 SignUpAPIでその電話番号で新たにアカウントを作ることができません。
しかし、これらの挙動を見るに、複数アカウントが作成された場合の電話番号によるログイン、削除、サインアップについては、他のアカウントは存在しないかのように扱われるようです。
その他参考になる記事