Cognitoでパスワードを忘れた時の実装方法

0

Cognitoでパスワードを忘れた時、確認用のコードをユーザーにメール送付することができますが、ユーザービリティの向上のためにユーザーにコードを入力させることを避けたいです。 そのためには、パスワード入力画面のURLにクエリパラメータとしてコードを直接付与するしか方法が思いつきませんでした。 他に方法はあるでしょうか?

yurugby
質問済み 9ヶ月前489ビュー
1回答
0

お問い合わせありがとうございます。
Amazon Cognito でユーザーがパスワードを忘れ、新しくパスワードを設定する際に、 E メールで受け取る復旧コードの入力の手間をユーザビリティ向上のために省きたいという認識の上、ご案内させていただきます。 もし認識に相違がございましたら、ご指摘いただけますと幸いです。

Amazon Cognito 単体では、復旧コードをクエリパラメータとして付与した URL を作成して送付できないため、今回のケースでは AWS Lambda を使用する必要がございます。

確認しましたところ、復旧コードをクエリパラメータとして付与した URL を AWS Lambda 上で作成し、そのリンクを Forgot Password のイベント時にユーザーの E メールに送ることができます。

しかしながら、Amazon Cognito で ホストされた UI 上では復旧コードの入力の手間を省くことは難しく、お客様の方でカスタマイズした UI を作成する必要があります。


解決策:
質問内ですでに言及いただきました通り、パスワード入力画面の URL にクエリパラメータとして復旧コードを直接付与する方法が解決案として考えられます。

まず、パスワードを変更する際には、ユーザーの復旧コードを検証する必要がございます。この検証に際して、Amazon Cognito は復旧コードを記載した E メールメッセージをユーザーに送信します。
今回の方法では、AWS Lambda をトリガーとして設定することで、パスワード変更の際に、復旧コードをクエリパラメータとして付与した URL を含む E メールメッセージをユーザーに送信します。

下記がそれぞれの詳細なステップになります。

  1. クエリパラメータを付与した URL を AWS Lambda 上で作成
    1-1. AWS マネジメントコンソールより AWS Lambda を選択し、関数の作成を選択
    1-2. 関数の中身には CustomMessage_ForgotPassword のトリガーソースを使用
    1-3. emailMessage の中身をカスタマイズする
    1-4. 関数の概要にCognito Sync Triggerを追加

カスタムメッセージの設定に関するより詳細な情報は、下記の記事を参照してください。

また、 CustomMessage_ForgotPassword のトリガーソースは、忘れたパスワードのリクエスト用の確認コードを送信する際に使用されるものです。
emailMessage の中身として、復旧コードをクエリパラメータとして付与した URL を設定することが可能です。
下記が、メッセージをカスタマイズする際の AWS Lambda 関数のコードの例になります。

const handler = async (event) => {
  if (event.triggerSource === "CustomMessage_ForgotPassword") {
    const message = `http://<your domain>/auth/forgot-password? 
    confirmation_code=${event.request.codeParameter}&user_name=${event.userName}`
    event.response.emailMessage = message;
  }
    return event;
};
export { handler };
  1. Amazon Cognito で Lambda トリガーの設定
    2-1. AWS マネジメントコンソールより Amazon Cognito を選択し、ユーザープールを選択
    2-2. ユーザープールの [ユーザープールのプロパティ] タブで [ Lambda トリガー] で Lambda トリガーを追加を選択
    2-3. トリガーに [メッセージング] を選択 し、前ステップで作成した AWS Lambda を選択
    2-4. Lambda トリガーを追加
    上記のステップを完了することで、カスタマイズした E メールのメッセージ内容が、Forgot Password イベント時にユーザーに送られるように設定されます。

  2. カスタマイズした UI を作成
    emailMessage の中身を AWS Lambda でカスタマイズすることで、Forgot Password イベント時に復旧コードをクエリパラメータとして付与した URL をユーザーに送ることは可能ですが、Amazon Cognito で ホストされた UI 上では、復旧コードの手動入力を省くことは難しいのが現状です。 そのため、SDK を使用し Custom UI を作成していただく必要がございます。
    ステップ 2 で述べたように、AWS Lambda を使用してカスタマイズした URL をユーザーに送ることができます。そちらの機能を利用し、お客様の方で Forgot Password のイベント時のカスタムインターフェースを作っていただく必要がございます。Custom UI 上で、URL のクエリーから復旧コードを取得できるので、ユーザーに手動で入力させることを防げると考えられます。


関連情報:

より具体的なサポートを必要とされる場合、以下のリンクよりサポートケースをご起票ください。

AWS
回答済み 8ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン