Amazon Cognito"客户端试图写未经授权的属性"

时间:2017-05-17 01:08:25

标签: javascript amazon-web-services amazon-cognito

我正在使用适用于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."
    }]
}

任何人都可以建议我为什么不能保存这些属性?

感谢

6 个答案:

答案 0 :(得分:61)

当然,当我在StackOverflow上发布时,答案就变得清晰了。

问题是我没有在与用户池关联的应用中为这些属性设置权限。文档应该在讨论自定义属性的地方明确这个要求。

enter image description here

答案 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
     }
   }