设置
我正在使用AWS Cognito来管理我的Web应用程序的用户注册和用户访问 . 具体来说,我使用的是Cognito托管的UI . 这意味着Cognito为我的用户提供了一个用户注册用户界面,我没有权限修改我的应用程序的用户注册或登录页面(除了Cognito提供的控件) . 我使用电子邮件地址作为用户名,因此只需要新用户提供电子邮件地址和密码 .
问题
Cognito将电子邮件地址视为区分大小写 . 如果用户使用电子邮件地址JOHN_smith@randommail.com注册,则他们无法使用john_smith@randommail.com登录 .
我希望注册和登录的用户电子邮件地址不区分大小写 .
我尝试过的
通常,在将电子邮件地址发送到服务器之前,通过在客户端中将电子邮件地址设置为小写来处理这一点很简单 . 但是我无权访问由Cognito托管的客户端UI .
因此,我的计划是尝试使用Cognito pre-signup trigger调用的Lambda函数来小写用户提供的电子邮件 .
预注册当用户尝试注册(注册)时,Amazon Cognito会调用此触发器,允许您执行自定义验证以接受或拒绝注册请求 .
这是我写的lamdba函数:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2));
var triggerSource = event.triggerSource;
console.log('Received triggerSource:', triggerSource);
var email = event.request.userAttributes.email;
console.log('Received email:', email);
var modifiedEvent = event;
if (email !== null) {
var lowerEmail = email.toLowerCase();
modifiedEvent.request.userAttributes.email = lowerEmail;
console.log('Set email in request to', lowerEmail);
console.log('Modified event:', JSON.stringify(modifiedEvent, null, 2));
} else {
console.log('Email evaluated as NULL, exiting with no action');
}
// Return result to Cognito
callback(null, modifiedEvent);
};
这个“工作”意味着事件请求中的电子邮件地址被修改为小写(john_smith@randommail.com) . 但是,在我的Lambda函数收到此事件时,似乎已在用户池中创建了帐户 . 更改请求中的电子邮件地址无效 - 原始电子邮件地址(JOHN_smith@randommail.com)仍显示在我的用户池中 . 我怀疑事件中唯一有效的字段是响应字段 . 这是我修改过的事件的样子:
{
"version": "1",
"region": "us-east-1",
"userPoolId": "us-east-1_xxxxxxx",
"userName": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
"callerContext": {
"awsSdkVersion": "aws-sdk-java-console",
"clientId": "xxxxxxxxxxxxxxxxxxxxxx"
},
"triggerSource": "PreSignUp_SignUp",
"request": {
"userAttributes": {
"email": "john_smith@randommail.com"
},
"validationData": null
},
"response": {
"autoConfirmUser": false,
"autoVerifyEmail": false,
"autoVerifyPhone": false
}
}
我的问题
我正在寻找想法或示例,以使我的用户注册和登录不区分大小写 . 这可能包括改变我的lambda触发器方法或完全不同的东西 .
请注意我知道我可以实现自己的用户界面,我只会作为最后的手段 .
1 回答
另一种可能性是,如果你可以创建一个用户注册api,这将在cognito中创建用户 . 修剪电子邮件并在电子邮件中执行小写操作 . 您可以在此之前执行自定义步骤 .
你是正确的,在注册执行后基本上会调用预注册触发器 .
https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html#aws-lambda-triggers-pre-registration-tutorials