AWS Cognito预认证触发器无法提取用户名/密码对问题咨询
AWS Cognito预认证触发器无法提取用户名/密码的原因及解决方案
为什么拿不到密码?
AWS Cognito的PreAuthentication触发器从设计上就不会传递用户的明文或哈希密码,这是安全机制决定的——Cognito不会把敏感的密码数据暴露给Lambda触发器。从你提供的日志也能看到,event.request里没有任何密码相关字段,只有userAttributes、validationData和userNotFound。
用户名的获取方式
你要的用户名其实已经在event的根层级里了,直接取event.userName就能拿到,比如你日志里的test。
需验证密码场景的替代方案
如果业务必须在认证前处理密码相关逻辑,只能通过自定义认证流程实现:
- 启用Cognito用户池的自定义认证模式
- 使用
DefineAuthChallenge、CreateAuthChallenge、VerifyAuthChallengeResponse这三个触发器,客户端可以把密码传递到Lambda,在触发器里完成验证逻辑
你的Lambda脚本优化
你的脚本有两个明显误区:
context对象里没有body属性,请求数据全在event里- 预认证触发器不需要返回API网关格式的
statusCode和body,直接返回修改后的event即可(无修改就原样返回)
优化后的示例:
export const handler = async(event) => { console.log("触发事件详情:", event); console.log("当前用户名:", event.userName); // 在这里添加你的业务逻辑,比如根据用户名查询用户信息 return event; };
内容的提问来源于stack exchange,提问作者sbajliboy
相关产品推荐
相关产品推荐

