使用 AWS Cognito 提供的 Lambda 函数来触发自定义消息。首先,需要创建两个 Lambda 函数来处理外部 IdP 帐户注册和传递数据给自定义消息。以下是示例代码:
const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider();
exports.handler = (event, context, callback) => {
console.log('Received event:', JSON.stringify(event));
const email = event.request.userAttributes.email;
const name = event.request.userAttributes.name;
const provider = event.userName.split('_')[0];
const params = {
UserPoolId: event.userPoolId,
Username: event.userName,
UserAttributes: [
{
Name: 'email',
Value: email
},
{
Name: 'name',
Value: name
},
{
Name: 'custom:provider',
Value: provider
}
]
};
cognito.adminUpdateUserAttributes(params, (err) => {
if (err) {
console.log('Error:', err);
callback(err);
return;
}
console.log('Successfully updated user attributes');
callback(null, event);
});
};
这个 Lambda 函数是用来更新用户属性的。在此示例中,我们存储了用户的电子邮件地址、名称和他们使用的 IdP 提供程序的名称。
接下来,创建一个 Lambda 函数来触发自定义消息:
const AWS = require('aws-sdk');
const sns = new AWS.SNS();
exports.handler = (event, context, callback) => {
console.log('Received event:', JSON.stringify(event));
const userEmail = event.request.userAttributes.email;
const userName = event.request.userAttributes.name;
const provider = event.request.userAttributes['custom:provider'];
const params = {
Message: `Welcome to our application, ${userName}! You have successfully signed up using ${provider}.`,
Subject: 'Welcome to Our App!',
TargetArn: process.env.SNS_TOPIC_ARN
};
sns.publish(params, (err, data