LoginSignup
0
0

aws-amplifyで仮パスワードを更新する

Posted at

はじめに

つまったので共有
公式ドキュメント分かりづらくない???

環境

モジュール等
Nuxt3 3.10
aws-amplify 6.3.2
@aws-sdk/client-cognito-identity-provider 3.577.0

背景

管理者ユーザーが自身の組織に一般ユーザーを追加するようなユースケースを想定して、ユーザー追加機能を実装していた

  1. 管理者が一般ユーザーの名前やメールアドレスなどを入力し、ユーザー追加を実行

  2. 裏でaws-sdkAdminCreateUserCommandを実行

  3. 成功すると、対象ユーザーのメールアドレスに仮パスワードが送信される
    このとき、Cognito上で対象ユーザーの確認ステータスはパスワードを強制的に変更となっている
    image.png

  4. 追加されたユーザーが仮パスワードとメールアドレスでログインする
    ここで、ログインにはaws-amplifySignInを使っている

  5. 確認ステータスがパスワードを強制的に変更のユーザーが仮パスワードでログインした際、SignInの返り値としてnextStep.signInStep: "CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED"が返される
    この段階ではログインできておらず、仮パスワードを更新する必要がある

詰まりポイント

公式ドキュメントを見たところ、以下の記載があった

The signIn API response will include a nextStep property, which can be used to determine if further action is required. It may return the following next steps:

CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED - The user was created with a temporary password and must set a new one. Complete the process with confirmSignIn.

ここで「ほむ、confirmSingInで処理すればいいんだな」と思い公式ドキュメント内を探すが、confirmSingInについて書かれているページが見当たらず...
辛うじて見つけたこちらも、結局仮パスワードの更新については書かれておらず...

このページだと、どの例でもchallengeResponseを引数に渡してるのでとりあえず以下で書いてみるも当然エラー...

await confirmSignIn({
  challengeResponse: newPassword
});

解決

confirmSignInの引数の型を見てみたところ、optionsに結構いろいろ書けるみたい
そこで以下のように書いてみたところ、通った

await confirmSignIn({
  challengeResponse: newPassword,
  options: {
    ChallengeName: "NEW_PASSWORD_REQUIRED",
  },
});

optionsChallengeNameを指定できるようでした。
公式ドキュメント読んでも全く分からなかった...

書いてて気づきましたが、もしかしてCONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIREDってWITH_の後をChallengeNameに入れたらいいよって意味なのか?
だとしたら初見殺しすぎないですかAWSさん... orz

おわりに

公式ドキュメントもうちょい読みやすくして~~~
あと、記事等を調べてもGen1の頃の記事が多く、Gen2の記事が全然見当たらなかったのもつらかった
(結構APIが変わってるので、Gen1の記事があんまり参考にならない)

もしoptionsに指定できる値一覧とかをドキュメントから見つけたら教えて頂けるとありがたいです :cry:
また、aws-amplifyの記事をGen1で書かれていた方はGen2版も書いて頂けると私が泣いて喜びます :joy:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0