我想从Cognito在数据库中存储验证码,并发送电子邮件以后


exports.handler = async event => {
console.log(event);
try {
const { userName } = event;
const { codeParameter } = event.request;
let userParams = { userId: userName, codeParameter };
// Identify why was this function invoked
if (event.triggerSource === 'CustomMessage_ForgotPassword') {
userParams['type'] = customCognitoTrigger.FORGOT_PASSWORD;
await putItemInTable(userParams, cognitoCodesTable);
}
if (event.triggerSource === 'CustomMessage_SignUp') {
userParams['type'] = customCognitoTrigger.SIGN_UP;
await putItemInTable(userParams, cognitoCodesTable);
}
} catch (err) {
console.log(err);
if (err.statusCode) {
return utils.returnEndpointMessage(err.statusCode, {
message: err.code || err.message,
});
}
return utils.returnSomethingWentWrongMessage();
}
// Return to Amazon Cognito
return event;
};

如何停止cognito base Email?我仍然收到一封带有验证码的基本电子邮件。我只是想把它存储在数据库中,而不接收任何电子邮件。

{
version: '1',
region: 'eu-west-1',
userPoolId: 'xxxxxxx',
userName: 'xxxxxxxx',
callerContext: {
awsSdkVersion: 'aws-sdk-unknown-unknown',
clientId: 'xxxxxxxx'
},
triggerSource: 'CustomMessage_SignUp',
request: {
userAttributes: {
sub: 'xxxxxxx',
'cognito:email_alias': 'xxxxxxx',
email_verified: 'false',
'cognito:user_status': 'UNCONFIRMED',
email: 'xxxxxxx'
},
codeParameter: '{####}',
linkParameter: '{##Click Here##}',
usernameParameter: null
},
response: { smsMessage: null, emailMessage: null, emailSubject: null }
}

这就是事件,我应该改变一些东西来回应吗?

为了阻止Cognito发送电子邮件,您需要配置一个自定义电子邮件发送器Lambda触发器(注意,正如文档中所述,该触发器不能像其他Lambda一样从AWS控制台分配,您需要使用API来分配它)。您正在使用的自定义消息Lambda触发器只允许自定义由AWS发送的消息。

下面是一个基于文档的代码片段示例,说明如何访问解码的验证码,然后将其存储在DB中:

const AWS = require('aws-sdk');
const b64 = require('base64-js');
const encryptionSdk = require('@aws-crypto/client-node');

const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const generatorKeyId = process.env.KEY_ALIAS;
const keyIds = [ process.env.KEY_ARN ];
const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds });
exports.handler = async (event) => {
// Decrypt the secret code using encryption SDK.
let plainTextCode;
if (event.request.code) {
const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code));
plainTextCode = plaintext
// TODO: Store the plainTextCode to Database ...
}
// additional code ...
return;
};

最新更新