如何在Cognito用户注册时设置不可变UUID?求替代方案
解决Cognito注册时添加不可变UUID的问题
问题核心:你当前用Pre-signup触发器调用AdminUpdateUserAttributes设置不可变的custom:uuid,但该操作是在用户创建后执行的更新操作,而不可变属性不允许被更新,因此触发报错。
无需修改属性的可变性,正确做法是在用户创建前就把UUID注入到用户属性中,让Cognito在创建用户时直接写入该属性,具体实现如下:
修改后的Lambda代码
import { uuidv7 } from 'uuidv7'; export const handler = async (event) => { console.log(event); const uuid = uuidv7(); console.log(uuid); // 将UUID添加到用户请求属性中,Cognito会在创建用户时直接写入 event.request.userAttributes['custom:uuid'] = uuid; // 根据用户池需求,可设置自动确认和验证(可选) event.response.autoConfirmUser = true; event.response.autoVerifyEmail = true; // 若用手机号验证则替换为autoVerifyPhoneNumber return event; };
原理说明
Pre-signup触发器的执行时机是用户提交注册请求后、Cognito正式创建用户记录之前。此时修改event.request.userAttributes中的属性,Cognito会将这些属性作为用户的初始属性一并创建,属于创建时设置而非后续更新,因此不会触发不可变属性的更新限制。
这种方式无需调用AdminUpdateUserAttributes接口,彻底避免了不可变属性的更新错误,同时保留了custom:uuid的不可变性。
内容的提问来源于stack exchange,提问作者garmfield
相关产品推荐
相关产品推荐

