我正在尝试使用带有以下代码的adminCreateUser API在AWS Cognito中创建用户
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',
}
/* more items */
],
};
cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) {
console.log(error,data);
res.send("test");
});
它总是抛出以下异常: InvalidParameterException:属性不符合架构:custom:dob:架构中不存在属性。
我做错了什么,如果是,请让我知道解决方案。
由于
答案 0 :(得分:3)
您必须提前添加自定义属性。您可以通过访问用户池并单击Attributes
链接来创建自定义属性。
答案 1 :(得分:2)
只需在这里添加我的案子即可。
在我的CloudFormation中,我有:
Schema:
- AttributeDataType: String
Name: role
DeveloperOnlyAttribute: true
Mutable: true
Required: false
在应用程序adminCreateUser
调用中,我必须将其提供为dev:custom:role
:
cognitoService.adminCreateUser({
UserPoolId: config.cognitoUserPoolId,
Username: email,
UserAttributes: [{
Name: 'dev:custom:role',
Value: role,
}]
}).promise()
尝试一下即可解决。希望我知道这个文档在哪里。
答案 2 :(得分:0)
达西的答案是正确的。但是我想详细说明一下,因为答案主要集中在AWS Web控制台上。
另外一个答案也就是前缀“ dev:”,这可能是未记录的解决方法(因此没有文档),并且可能会在没有警告的情况下停止工作。
首先,必须在创建Userpool时创建自定义属性。
CreateUserPoolRequest request = new CreateUserPoolRequest
{
...
Schema = new List<SchemaAttributeType>
{
new SchemaAttributeType
{
Name = "email",
AttributeDataType = AttributeDataType.String,
Required = true,
Mutable = false
},
new SchemaAttributeType //custom attribute
{
Name = "blah",
AttributeDataType = AttributeDataType.String,
Mutable = false
},
...
};
然后在创建用户时可以对其进行设置。
var request = new AdminCreateUserRequest
{
...
UserAttributes = new List<AttributeType>
{
new AttributeType
{
Name = "email",
Value = "xyz@xyz.com"
},
new AttributeType //custom attribute
{
Name = $"custom:blah",
Value = "value for blah"
}
}
};
现在,仅以“ custom:”作为前缀即可。
还请注意,AWS继承了具有不一致的api的传统,即在创建用户池时不必前缀,在创建用户时也无需前缀。