我正在使用适用于AWS Cognito的JavaScript SDK,并且有几个自定义属性我似乎无法保存,并且无法理解原因。
问题属性是可变字符串字段,如下所示:
custom: role
custom: recruitingrole
custom: title
同一请求中的其他自定义字段似乎更新确定。具体来说,这些似乎有效:
custom:division
custom:linkedin
custom:location
custom:bio
当我通过SDK提交时,会返回:
{" __ type":" NotAuthorizedException"," message":"客户端试图写未经授权的属性"}
以下是发送的数据,如Chrome开发者控制台网络输出中所示:
{
"AccessToken": "",
"UserAttributes": [{
"Name": "name",
"Value": "Steve Austin"
}, {
"Name": "custom:company",
"Value": "OSI"
}, {
"Name": "custom:division",
"Value": "Bionics"
}, {
"Name": "custom:recruitingrole",
"Value": "other"
}, {
"Name": "custom:linkedin",
"Value": "http://www.linkedin.com"
}, {
"Name": "custom:location",
"Value": "Mexico City, Mexico City, Mexico"
}, {
"Name": "custom:bio",
"Value": "A man barely alive."
}]
}
任何人都可以建议我为什么不能保存这些属性?
感谢
答案 0 :(得分:61)
答案 1 :(得分:20)
只需突出@mvandillen的答案:
常规设置 - >应用客户 - >显示详细信息 - >设置属性读写权限链接
答案 2 :(得分:1)
对于任何偶然发现此问题的人:
与其他建议一样,您应该启用可写属性。但是,如果这样不起作用,请确保使用custom:
前缀:
await Auth.signUp({
username: email,
password: password,
attributes: {
'custom:firstName': firstName,
'custom:lastName': lastName,
'custom:countryCode': countryCode
}
})
答案 3 :(得分:0)
在ASP.NET Core中使用 Amazon.Extensions.CognitoAuthentication ,您必须添加:
var user = _pool.GetUser(model.Email)
user.Attributes.Add("name", model.Name);
name
是自定义属性
答案 4 :(得分:0)
我的情况有些不同。我正在使用Amplify角度组件,但没有任何自定义属性(标准的电子邮件登录类型)。
事实证明,注册字段的键区分大小写。对于大写的“电子邮件”键,我将看到错误。 下面是注册配置
emailSignUpConfig = {
header: 'Sign up header',
hideAllDefaults: true,
defaultCountryCode: '1',
signUpFields: [
{
label: 'Email',
key: 'email', //the email should be in lower case
required: true,
displayOrder: 1,
type: 'string',
},
{
label: 'Password',
key: 'password',
required: true,
displayOrder: 2,
type: 'password',
},
],
};
答案 5 :(得分:0)
启用可写属性后,这对我有效
const user = {
username:this.username,
password:this.password,
attributes:{
email:this.email,
'custom:field1': this.field1,
'custom:field2': this.field2,
'custom:field3': this.field3
}
}
OR
const user = {
username:this.username,
password:this.password,
email:this.email,
attributes:{
'custom:field1': this.field1,
'custom:field2': this.field2,
'custom:field3': this.field3
}
}