AWS Cognito中如何实现已确认用户的邮箱按需验证?
AWS Cognito 实现未验证邮箱用户登录+受限操作的方案
这个需求完全可以实现,以下是几个可行的落地方案:
方案一:应用层结合用户属性校验
Cognito用户默认带有email_verified布尔属性,你可以在用户登录后通过以下方式获取该属性:
- 前端:使用AWS Amplify的
Auth.currentUserInfo()方法获取用户详情 - 后端:调用Cognito的
GetUserAPI接口
在业务逻辑中对特定操作做拦截:
- 当用户执行受限操作时,检查
email_verified的值 - 如果为
false,直接引导用户进入邮箱验证流程(调用ResendConfirmationCodeAPI重发验证邮件,用户完成验证后email_verified会自动变为true) - 验证完成后再允许用户继续执行操作
方案二:API Gateway自定义授权器拦截(适用于后端API场景)
如果你的受限操作对应后端API,可以通过Lambda自定义授权器实现网关层面的拦截:
- 编写Lambda函数,在授权逻辑中调用Cognito的
GetUserAPI获取用户的email_verified属性 - 针对受限API配置该自定义授权器,当检测到用户
email_verified为false时,返回拒绝访问的响应 - 前端收到拒绝响应后,引导用户完成邮箱验证
方案三:Cognito触发器+IAM权限控制
利用Cognito的Post Authentication触发器,在用户登录后自动标记未验证用户:
- 创建Lambda触发器,在用户登录成功后检查
email_verified状态 - 如果未验证,给用户添加自定义属性(如
custom:requires_verification)或加入特定用户组(如UnverifiedUsers) - 在IAM策略中配置权限规则,限制该属性/用户组的用户访问特定资源或执行特定操作
- 当用户完成邮箱验证后,可通过另一个触发器(如Post Confirmation)移除标记或移出用户组
关键配置注意事项
要确保用户能直接登录(无需先确认账户)但邮箱未验证,需在用户池设置中:
- 将“邮箱验证”设置为可选(避免强制用户验证后才能登录)
- 若通过后台创建用户,调用
AdminCreateUser时设置UserAttributes中的email_verified为false,同时将UserStatus设为CONFIRMED
内容的提问来源于stack exchange,提问作者user12051965
相关产品推荐
相关产品推荐

