我开始为我的虚拟ios应用程序探索AWS cognito,虽然我在新用户注册时收到了电子邮件中的确认链接,然后单击它会正确验证电子邮件。
我们是否有忘记密码的相同功能,即获取链接而不是代码,并将其重定向到我的虚拟网站,其中只有用户需要输入的是新密码。
提前谢谢。
答案 0 :(得分:5)
是。您可以拨打ForgotPassword端点:
{
"AnalyticsMetadata": {
"AnalyticsEndpointId": "string"
},
"ClientId": "string",
"SecretHash": "string",
"Username": "string"
}
然后,您需要拨打电话(从您的网站代码)到ConfirmForgotPassword端点重置密码:
{
"AnalyticsMetadata": {
"AnalyticsEndpointId": "string"
},
"ClientId": "string",
"ConfirmationCode": "string",
"Password": "string",
"SecretHash": "string",
"Username": "string"
}
答案 1 :(得分:5)
我可能在我的项目中实现了这一目标。
它是通过aws cognito中的触发器完成的。
在要触发的“自定义消息触发设置lambda”功能中。
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);
};
然后在您的网站上进行一条处理此代码的路由。
答案 2 :(得分:2)
我忘记了几个月前我问过的这个问题,想到用答案更新它。因此,根据AWS文档:&#34;调用此API会将消息发送给最终用户,并使用更改用户密码所需的确认码。对于Username参数,您可以使用用户名或用户别名。如果用户存在经过验证的电话号码,则会将确认码发送到电话号码。否则,如果存在经过验证的电子邮件,则会将确认代码发送到电子邮件。如果既不存在经过验证的电话号码也不存在经过验证的电子邮件,则会引发InvalidParameterException。 &#34;
Here is the link to AWS doc.
因此,可能有一些解决方法可以实现它,但AWS Cognito现在不支持为忘记密码发送自我验证链接。
答案 3 :(得分:0)
我知道这个问题已经得到了回答和接受,尽管Cognito确实没有开箱即用地做到这一点,但我想找到一种使它无缝运行的方法。
这是我想出的:
CognitoUser
实例并在该用户上调用forgotPassword
函数。CognitoUser
实例并调用confirmPassword
函数。对此有何想法?我使用相同的机制来使用户注册无缝地进行工作,尽管这需要更多的工作。
答案 4 :(得分:0)
您必须触发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);
};
答案 5 :(得分:0)
如果您使用的是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;
};
关键是您发回了相同的事件对象,而不是构造一些新的响应对象。 仅受投票最多的答案的启发。谢谢。