如何通过CLI为Amplify Cognito的emailVerificationMessage设置HTML模板
Amplify CLI 配置Cognito验证邮件HTML内容的可行方案
默认情况下,通过Amplify CLI直接传入emailVerificationMessage的内容会被自动做纯文本转义,HTML标签会被直接转成普通字符显示,无法正常渲染为富文本,所以会出现配置不生效的情况。可通过以下三种方案实现需求:
方案1:修改Amplify项目本地配置文件后推送
该方案配置会跟随Amplify项目做版本管理,后续推送不会被覆盖,适合常规HTML需求:
- 进入你的Amplify项目的
amplify/backend/auth/<你的认证资源名>/目录,打开parameters.json文件 - 找到
emailVerificationMessage字段,直接写入你需要的完整HTML内容,注意内容中的双引号需要转义为\",示例如下:
注意内容里的"emailVerificationMessage": "<p>欢迎注册我们的服务,你的验证码是:<strong>{####}</strong>,请在15分钟内完成验证</p>"{####}是Cognito的内置占位符,会自动替换为实际生成的验证码 - 同步修改
emailVerificationSubject字段配置邮件主题 - 保存文件后,在项目根目录执行
amplify push,等待资源推送完成即可生效
方案2:直接通过AWS CLI更新Cognito用户池配置
适合临时快速调整,不需要改动Amplify本地配置的场景:
- 首先获取你的Cognito用户池ID,可在AWS控制台Cognito页面查看,或执行
amplify status找到auth资源对应的用户池ID - 执行以下命令,替换尖括号里的参数为你自己的内容:
aws cognito-idp update-user-pool --user-pool-id <你的用户池ID> --auto-verified-attributes email --verification-message-template "EmailMessage=<p>你的验证码是<strong>{####}</strong></p>,EmailSubject=验证你的邮箱地址" - 注意如果HTML内容里有空格或者特殊字符,需要用引号把整个
verification-message-template的参数值完整包裹 - 该方案改动即时生效,但如果之后执行
amplify push时auth部分有更新,该配置可能被Amplify的默认配置覆盖,需要重新执行
方案3:使用Cognito自定义消息Lambda触发器
适合HTML内容复杂度高、需要动态渲染自定义内容的场景:
- 执行
amplify add function,创建一个Node.js运行环境的Lambda函数,权限选择关联Cognito用户池 - 在Lambda函数代码中处理
CustomMessage_SignUp事件,返回你需要的HTML内容,代码示例:exports.handler = (event, context, callback) => { // 匹配注册验证邮件的触发场景 if (event.triggerSource === 'CustomMessage_SignUp') { event.response.emailSubject = "欢迎注册我们的服务"; event.response.emailMessage = ` <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;"> <h2>感谢你的注册</h2> <p>你的邮箱验证码是:<span style="color: #2563eb; font-size: 20px; font-weight: bold;">${event.request.codeParameter}</span></p> <p>验证码有效期为15分钟,请勿泄露给他人</p> </div> `; } callback(null, event); }; - 执行
amplify push推送资源后,在Cognito用户池的触发器设置中,将自定义消息触发器绑定到你刚创建的Lambda函数即可 - 该方案支持任意复杂度的HTML样式,还可以动态插入用户属性等自定义内容,配置不会被Amplify推送覆盖
内容的提问来源于stack exchange,提问作者Parth Shah
相关产品推荐
相关产品推荐

