我正在尝试为AWS Cognito设置自定义电子邮件发件人触发器。用户由子系统使用cognito的admin-create-user命令创建。这将触发一封带有初始一次性密码的电子邮件。90%的时间都在工作。
有时解密后的密码包含一个符号,该符号被表示为HTML实体,而Cognito则期望用户输入真实的的符号
lambda邮件发送方内部的解密值(发送给用户):
iPi1Hz>H
(注意>
部分)
正确密码:
iPi1Hz>H
我的lambda自定义电子邮件发件人的解密部分
const getPlainTextCode = async (event: CustomEmailSenderTriggerEvent) => {
if (!event.request.code) {
throw Error("Could not find code");
}
if (!process.env.KEY_ID) {
throw Error("Cannot decrypt code");
}
const client = buildClient(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const generatorKeyId = process.env.KEY_ALIAS;
const keyIds = [process.env.KEY_ID];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });
let plainTextCode: string | undefined = undefined;
const decryptOutput = await client.decrypt(keyring, Buffer.from(event.request.code, "base64"));
if (event.userPoolId !== decryptOutput.messageHeader.encryptionContext["userpool-id"]) {
throw new Error("Encryption context does not match expected values!");
}
plainTextCode = decryptOutput.plaintext.toString(); // this outputs iPi1Hz>H
return plainTextCode;
};
1条答案
按热度按时间egmofgnx1#
遇到了同样的问题,团队中的一个人使用一个取消解析保留字符的函数解决了这个问题,如下所示
并在plainTextCode对象上使用,如下所示
学分: