新しいユーザーのサインアップ中にメールに確認リンクが表示されますが、それをクリックするとメールが正しく確認されるのですが、私はダミーのiosアプリケーション用にAWS cognitoを探索し始めました。
パスワードを忘れた場合と同じ機能がありますか。つまり、コードの代わりにリンクを取得して、ダミーのWebサイトにリダイレクトします。この場合、ユーザーが入力する必要があるのは新しいパスワードだけです。
前もって感謝します。
私は数か月前に尋ねたこの質問を忘れていました。答えで更新することを考えました。したがって、AWSドキュメントによると:
"このAPIを呼び出すと、ユーザーのパスワードを変更するために必要な確認コードを含むメッセージがエンドユーザーに送信されます。Usernameパラメータには、ユーザー名またはユーザーエイリアス。確認済みの電話番号がユーザーに存在する場合、確認コードが電話番号に送信されます。それ以外の場合、確認済みのメールが存在する場合、確認コードがメールに送信されます。確認済みの電話番号も検証済みのメールが存在するため、InvalidParameterExceptionがスローされます。 "
これはAWSドキュメントへのリンクです
そのため、いくつかの回避策があるかもしれませんが、パスワードを忘れた場合の自己確認リンクの送信は、現時点ではAWS Cognitoでサポートされていません。
私のプロジェクトでこれを達成した可能性があります。
これは、aws cognitoのトリガーを介して行われます。
カスタムメッセージトリガーで、トリガーするラムダ関数を設定します。
const AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {
var CustomMessage_ForgotPassword = `<style>
p {
display: block;
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 0px;
margin-inline-end: 0px;
}
</style>
<div id=":x9" class="a3s aXjCH " role="gridcell" tabindex="-1"><p>Hello,</p>
<p>Follow this link to reset your Password. </p>
<p><a href="https://your-website.com/reset-password?confirmation_code=${event.request.codeParameter}&user_name=${event.userName}"> Reset Password </a></p>
<p>If you didn’t ask to change password, you can ignore this email.</p>
<p>Thanks,</p>
<p>Your website team</p>
</div>`
if (event.triggerSource === "CustomMessage_ForgotPassword") {
event.response.emailMessage = CustomMessage_ForgotPassword;
}
callback(null, event);
};
次に、あなたのウェブサイトで、このコードを処理する1つのルートを作成します。
はい。 ForgotPassword エンドポイントを呼び出すことができます。
{
"AnalyticsMetadata": {
"AnalyticsEndpointId": "string"
},
"ClientId": "string",
"SecretHash": "string",
"Username": "string"
}
次に、(ウェブサイトのコードから) ConfirmForgotPassword エンドポイントを呼び出して、パスワードをリセットする必要があります。
{
"AnalyticsMetadata": {
"AnalyticsEndpointId": "string"
},
"ClientId": "string",
"ConfirmationCode": "string",
"Password": "string",
"SecretHash": "string",
"Username": "string"
}
私はこの質問に答えて受け入れたことを知っています。そして、Cognitoがそのままではこれを行わないのは事実ですが、これをシームレスに機能させる方法を見つけたかったのです。
これが私が思いついたものです:
CognitoUser
インスタンスを作成し、ユーザーのforgotPassword
関数を呼び出します。CognitoUser
インスタンスを取得し、confirmPassword
関数を呼び出します。これについて何か考えはありますか?同じ種類のメカニズムを使用して、ユーザー登録がシームレスに機能するようにしましたが、少し作業が必要でした。
Lambda関数をトリガーして、一般設定->トリガー->ユーザープール(AWS)のカスタムメッセージにアタッチする必要があります。
以下がその例です。
exports.handler = (event, context, callback) => {
// https://docs.aws.Amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html
// dev
if(event.userPoolId === "YOUR USER POOL ID") {
// Identify why was this function invoked
if(event.triggerSource === "CustomMessage_ForgotPassword") {
event.response.smsMessage = "Your confirmation code is: " + event.request.codeParameter;
event.response.emailSubject = "Confirmation Code";
event.response.emailMessage = "Your confirmation code: " + event.request.codeParameter + "<br/><br/>Please visit this url and provide the requested information: ~your url~";
}
}
// Return to Amazon Cognito
callback(null, event);
};
新しいNode.jsバージョン> = 10を使用している場合、以下のバージョンが役立つ可能性があります
const AWS = require('aws-sdk');
exports.handler = async (event) => {
var CustomMessage_ForgotPassword = `<style>
p {
display: block;
font-size: 14px;
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 0px;
margin-inline-end: 0px;
}
</style>
<div>
<p>
<img align="center"
alt="logo"
src=""
width="248"
style="max-width:400px;padding-bottom:0px;vertical-align:bottom;display:inline!important;border:1px none;border-radius:0%;height:auto;outline:none;text-decoration:none"
>
<br/>
<br/>
<p style="font-size=28px;font-weight:bold;">You have submitted a password change request</p>
<p>If this was you click the URL below to change your password</p>
<p><a href="http://localhost:3000/auth/forgot-password?confirmation_code=${event.request.codeParameter}&user_name=${event.userName}"> Reset Password </a></p>
</div>`
if (event.triggerSource === "CustomMessage_ForgotPassword") {
event.response.emailMessage = CustomMessage_ForgotPassword;
}
return event;
};
重要なのは、同じイベントオブジェクトを送り返し、新しい応答オブジェクトを作成しないことです。最も投票された回答のみに触発されます。ありがとう。