Cognito ユーザープールのパスワード検証をリンクにしたいのですが、どうすればいいでしょうか?への回答

Cognitoユーザープールにて、パスワードリセット時の検証をコードからリンクへの変更する方法への解答です。
2020.11.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

困っていたこと

Cognitoユーザープールを作成しました。

ユーザーがパスワードを忘れてしまった時にユーザーに送信される検証メールの本文をリンクに設定しましたが実際に送信されたのはコードでした。

全般設定 > メッセージのカスタマイズ > 検証タイプ > コードからリンクへ変更を実施

受信したメッセージ

From:no-reply@verificationemail.com 件名:Your verification code 本文:Your password reset code is XXXXX

管理コンソールからユーザープールのメッセージのカスタマイズを確認したところ、設定はリンクになっており文言もテンプレートで指定したものが入力され問題ないように見えます。

パスワードリセットについてリンクで検証するにはどうすればいいでしょうか?

解決方法

前提としてCognitoを利用したサインアップステップは以下となります。

  1. ユーザーがサインアップ(ユーザー作成)画面でユーザー名とメールアドレスを入力する
  2. Eメール検証が行われる(ユーザーに対しコードまたはリンクが送信される)
  3. ユーザーはコードまたはリンクによりEメールが正しいことを検証される

マネジメントコンソールで設定したメッセージのカスタマイズは、上記2についてのEメール検証になります。 パスワードに関しては、デフォルトではコードが送信される仕様となっております。そのため、パスワードリセットについてはコード検証のみが利用できます。

パスワードのリセットが必要

ユーザーアカウントは確認されましたが、ユーザーはサインインする前にコードをリクエストし、自身のパスワードをリセットする必要があります。

参考:https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/signing-up-users-in-your-app.html

また、パスワードリセット時にLambdaによりメッセージをカスタマイズ可能(CustomMessage_ForgotPassword)ですが、パスワードリセットをリンクで実施するAPIがないため、こちらもご利用いただけません。(2020/11/17時点の情報となります)

参考:https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-custom-message.html

引き続き、コードによるパスワードリセットをご利用いただく必要があります。

以上、千葉がお送りしました。