- 최신
- 최다 투표
- 가장 많은 댓글
お問い合わせありがとうございます。
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 メールメッセージをユーザーに送信します。
下記がそれぞれの詳細なステップになります。
- クエリパラメータを付与した URL を AWS Lambda 上で作成
1-1. AWS マネジメントコンソールより AWS Lambda を選択し、関数の作成を選択
1-2. 関数の中身には CustomMessage_ForgotPassword のトリガーソースを使用
1-3. emailMessage の中身をカスタマイズする
1-4. 関数の概要にCognito Sync Triggerを追加
カスタムメッセージの設定に関するより詳細な情報は、下記の記事を参照してください。
- カスタムメッセージの Lambda トリガー https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-custom-message.html
また、 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 };
-
Amazon Cognito で Lambda トリガーの設定
2-1. AWS マネジメントコンソールより Amazon Cognito を選択し、ユーザープールを選択
2-2. ユーザープールの [ユーザープールのプロパティ] タブで [ Lambda トリガー] で Lambda トリガーを追加を選択
2-3. トリガーに [メッセージング] を選択 し、前ステップで作成した AWS Lambda を選択
2-4. Lambda トリガーを追加
上記のステップを完了することで、カスタマイズした E メールのメッセージ内容が、Forgot Password イベント時にユーザーに送られるように設定されます。 -
カスタマイズした UI を作成
emailMessage の中身を AWS Lambda でカスタマイズすることで、Forgot Password イベント時に復旧コードをクエリパラメータとして付与した URL をユーザーに送ることは可能ですが、Amazon Cognito で ホストされた UI 上では、復旧コードの手動入力を省くことは難しいのが現状です。 そのため、SDK を使用し Custom UI を作成していただく必要がございます。
ステップ 2 で述べたように、AWS Lambda を使用してカスタマイズした URL をユーザーに送ることができます。そちらの機能を利用し、お客様の方で Forgot Password のイベント時のカスタムインターフェースを作っていただく必要がございます。Custom UI 上で、URL のクエリーから復旧コードを取得できるので、ユーザーに手動で入力させることを防げると考えられます。
関連情報:
- E メールまたは電話による検証の設定 https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html
- カスタムメッセージの Lambda トリガー https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-custom-message.html
- サインアップ前の Lambda トリガー https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html
- Should I use the hosted UI or create a custom UI in Amazon Cognito?(英語のみ) https://aws.amazon.com/blogs/security/use-the-hosted-ui-or-create-a-custom-ui-in-amazon-cognito/
より具体的なサポートを必要とされる場合、以下のリンクよりサポートケースをご起票ください。