使用AWS Cognito AdminCreateUser创建含自定义属性用户报错求助
问题描述
我尝试使用AWS Cognito的AdminCreateUser API创建用户时,始终抛出InvalidParameterException异常,错误信息为:
Attributes did not conform to the schema: custom:dob: Attribute does not exist in the schema
我的代码如下:
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider(); var params = { UserPoolId: "us-east-1_302HlhnaC", /* required */ Username : "test@yopmail.com", ForceAliasCreation: true, TemporaryPassword: 'test@yopmail.com', UserAttributes: [ { Name: 'given_name', /* required */ Value: 'test' }, { Name: 'family_name', /* required */ Value: 'kumar' }, { Name: 'name', /* required */ Value: 'test' }, { Name: 'custom:dob', /* required */ Value: '1990-07-25' }, { Name: 'email', /* required */ Value: 'test@yopmail.com', }, { Name: 'email_verified', /* required */ Value: 'true', } ], }; cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) { console.log(error,data); res.send("test"); });
解决方案
这个问题本质是你在代码里使用的custom:dob自定义属性,并没有在对应的Cognito用户池中配置,按以下步骤排查修复:
检查并添加自定义属性
登录AWS控制台,找到你代码中指定的us-east-1_302HlhnaC用户池,进入属性标签页,在「自定义属性」区域查看是否有dob属性(注意Cognito会自动给自定义属性加上custom:前缀,所以创建时只需要填dob)。如果没有,点击「添加自定义属性」,设置属性名称为dob,类型选择「字符串」(因为你的值是日期格式的字符串),然后保存配置。确认属性的可写权限
创建或修改自定义属性时,一定要勾选「可写」选项——如果这个属性设置为只读,那么通过AdminCreateUser API写入值时会直接报错,确保这个权限是开启的。验证代码中的属性名称格式
你代码里用的custom:dob格式是正确的,Cognito自定义属性的命名规则就是custom:属性名,这部分不需要修改。
如果做完以上操作还是报错,建议再核对下代码里的UserPoolId是否和控制台里的完全一致,避免拼写错误导致找不到对应的用户池配置。
内容的提问来源于stack exchange,提问作者Manoj Thakur

