要允许EXTERNAL_PROVIDER用户(例如Google或Facebook用户)在AWS Cognito托管UI中创建密码,您可以使用AWS Lambda触发器自定义注册流程。
以下是一个示例解决方案,其中使用AWS Lambda函数和Cognito触发器来实现此功能:
exports.handler = async (event) => {
// 检查用户是否是EXTERNAL_PROVIDER用户
const isExternalProvider = event.request.userAttributes.hasOwnProperty('email');
// 如果是EXTERNAL_PROVIDER用户,则将自动生成一个密码
if (isExternalProvider) {
event.response.autoConfirmUser = true;
event.response.autoVerifyEmail = true;
event.response.autoVerifyPhone = true;
event.response.messageAction = "SUPPRESS";
// 生成一个随机密码并将其添加到用户属性中
const password = generateRandomPassword();
event.response.userAttributes = {
...event.response.userAttributes,
password,
};
}
return event;
};
function generateRandomPassword() {
// 生成一个随机密码
// 可以使用任何适合您的密码生成算法
return Math.random().toString(36).slice(-8);
}
这样,当用户使用EXTERNAL_PROVIDER进行注册时,Lambda函数将触发,并在用户注册之前自动生成一个密码。用户将收到此密码并可以在以后使用它。
请注意,此示例仅提供了一种实现方法,并且可能需要根据您的特定需求进行修改。