如何禁用AWS Cognito的默认邮件发送功能?
禁用AWS Cognito注册默认邮件并自定义验证流程
一、AWS控制台配置步骤
- 登录AWS控制台,打开Cognito服务,选中你的目标用户池
- 点击左侧菜单栏的验证选项
- 在「电子邮件验证」区域,将「发送验证邮件」的下拉选项改为不发送
- 点击页面底部「保存更改」
二、代码调整实现自定义验证逻辑
禁用Cognito自动邮件后,需自行处理邮箱验证流程,确保用户完成账号激活。以下是适配后的代码示例:
import { Auth } from "aws-amplify" import { SendTemplatedEmailCommand } from "@aws-sdk/client-ses" const handleRegister = async () => { try { // 注册用户,此时Cognito不会自动触发验证邮件 const { user } = await Auth.signUp({ username: formik.values.email, password: formik.values.password, }) // 构造自定义邮件数据,这里以包含后端验证链接为例 const emailData = { userEmail: formik.values.email, verifyLink: `https://your-app-domain.com/verify?email=${encodeURIComponent(formik.values.email)}` } // 通过SES发送自定义验证邮件 const emailCommand = new SendTemplatedEmailCommand({ Destination: { ToAddresses: [formik.values.email] }, TemplateData: JSON.stringify({ data: emailData }), Source: "verified@email.com", Template: "welcome", }) await client.send(emailCommand) formik.resetForm() notification.success({ message: "注册成功,请查收邮件完成账号验证" }) } catch (e) { notification.error({ message: e.message }) } } // 邮箱验证处理函数(后端或前端调用,完成Cognito账号确认) const confirmEmailVerification = async (email, confirmationCode) => { try { await Auth.confirmSignUp(email, confirmationCode) notification.success({ message: "邮箱验证成功,可正常登录" }) } catch (e) { notification.error({ message: e.message }) } }
关键说明
- 用户池App客户端需确保开启
sign_up和confirm_sign_up权限 - 若使用验证链接,建议通过后端处理确认请求,避免前端直接执行敏感操作
- 自定义邮件模板需清晰告知用户验证步骤,比如点击链接跳转至验证页面,或提示输入验证码
内容的提问来源于stack exchange,提问作者psudo
相关产品推荐
相关产品推荐

