完整的设置指南。
完整文章链接:
https://medium.com/@jacobjoy/redirect-user-using-amazon-cognito-confirmation-url-d8ccb11bac75
谢谢@yasith,从简单的图片开始,让我们清楚地了解我们是如何解决这个问题的,
第 1 步: 使用您选择的语言创建一个 lambda 函数,我将在以下示例中使用 node.js。
请在继续之前阅读自定义消息 Lambda 触发器,https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html
在此示例中,我仅处理 CustomMessage_SignUp 您可以根据您的要求为 CustomMessage_ForgotPassword 等其他人进行自定义。
将以下代码复制到您的 lambda 函数中,
// Creating a custom URL for the user
exports.handler = (event, context, callback) => {
if(event.triggerSource === "CustomMessage_SignUp") {
const { codeParameter } = event.request;
const { userName, region } = event;
const { clientId } = event.callerContext;
const { email } = event.request.userAttributes;
const url = 'https://xxxxxxx.execute-api.eu-west-2.amazonaws.com/prod/redirect'
const link = `<a href="${url}?code=${codeParameter}&username=${userName}&clientId=${clientId}®ion=${region}&email=${email}" target="_blank">Click the link to verify</a>`;
event.response.emailSubject = "Your verification link";
event.response.emailMessage = `Thank you for signing up. Click ${link} to verify your email.`;
}
// CallBack to the lambda for the email trigger
callback(null, event);
};
注意:一旦您设置了 API Gateway,就应该更新 const URL。
第 2 步:在 Cognito Trigger 下选择自定义消息并选择您创建的 lambda 函数
第 3 步: 在您的 API 网关中创建一个 GET API
请勿设置任何授权或启用所需的任何 API 密钥。
第 4 步: 创建另一个 Lambda 函数来验证和确认用户。
'use strict';
var AWS = require('aws-sdk');
AWS.config.setPromisesDependency(require('bluebird'));
var CognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({
apiVersion: '2019-11-07',
region: process.env.REGION
});
exports.handler = (req, context, callback) => {
console.log(req);
const confirmationCode = req.code;
const username = req.username;
const clientId = req.clientId;
let params = {
ClientId: clientId,
ConfirmationCode: confirmationCode,
Username: username
};
//Validating the user
let confirmSignUp = CognitoIdentityServiceProvider.confirmSignUp(params).promise();
//Returning the redirect url
confirmSignUp.then(
(data) => {
context.succeed({
location: process.env.POST_REGISTRATION_VERIFICATION_REDIRECT_URL
});
}
).catch(
(error) => {
callback(error.message)
}
)
};
在您选择的 IDE 中创建一个节点应用程序,然后使用 npm install 进行构建,一旦您的应用程序构建完成。
创建一个 zip(在根文件夹 5 文件中,大约基于您的 IDE)并上传到您的 lambda 应用程序。
Lambda Handler 方法应该是 = index.handler
在 lambda 环境变量中设置以下内容
POST_REGISTRATION_VERIFICATION_REDIRECT_URL 区域
在您的应用程序中,您正在验证 cognito 用户池中的用户并返回重定向的 URL。
不在范围内:错误场景也可以根据您的要求处理。
Step5:回到API Gateway,创建一个GET请求并放入您必须在Step4中创建的Lambda函数并更新映射模板。
第 6 步: 现在我们必须根据您的 lambda 响应重定向请求,
在 API Gateway 中的 Method Response 下删除 200 并创建一个 302 并根据图像添加响应标头 Location,
然后在集成响应中,您需要删除 200 并添加 302,然后将标题映射值添加为 integration.response.body.location (注意字符大小写)
最重要的步骤:完成所有设置后部署 API 并更新
Lambda 函数中的 const URL API,在 step1 中创建。
尝试创建一个测试用户,用户必须有类似这样的电子邮件链接,
https://xxxx-api.eu-west-2.amazonaws.com/xx/xx/xx/redirect?code=xx&username=xxxxx;clientId=xxxxx;region=eu-west-2&email=test@gmail.com