はじめに
つまったので共有
公式ドキュメント分かりづらくない???
環境
Nuxt3 3.10
aws-amplify 6.3.2
@aws-sdk/client-cognito-identity-provider 3.577.0
背景
管理者ユーザーが自身の組織に一般ユーザーを追加するようなユースケースを想定して、ユーザー追加機能を実装していた
-
管理者が一般ユーザーの名前やメールアドレスなどを入力し、ユーザー追加を実行
-
裏で
aws-sdk
のAdminCreateUserCommand
を実行 -
成功すると、対象ユーザーのメールアドレスに仮パスワードが送信される
このとき、Cognito上で対象ユーザーの確認ステータスはパスワードを強制的に変更
となっている
-
追加されたユーザーが仮パスワードとメールアドレスでログインする
ここで、ログインにはaws-amplify
のSignIn
を使っている -
確認ステータスが
パスワードを強制的に変更
のユーザーが仮パスワードでログインした際、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",
},
});
options
にChallengeName
を指定できるようでした。
公式ドキュメント読んでも全く分からなかった...
書いてて気づきましたが、もしかしてCONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED
ってWITH_
の後をChallengeName
に入れたらいいよって意味なのか?
だとしたら初見殺しすぎないですかAWSさん... orz
おわりに
公式ドキュメントもうちょい読みやすくして~~~
あと、記事等を調べてもGen1の頃の記事が多く、Gen2の記事が全然見当たらなかったのもつらかった
(結構APIが変わってるので、Gen1の記事があんまり参考にならない)
もしoptions
に指定できる値一覧とかをドキュメントから見つけたら教えて頂けるとありがたいです
また、aws-amplify
の記事をGen1で書かれていた方はGen2版も書いて頂けると私が泣いて喜びます