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

Duk*_*gal 32 javascript amazon-web-services amazon-cognito

我正在使用适用于AWS Cognito的JavaScript SDK,并且有一些我似乎无法保存的自定义属性,无法查看原因.

问题属性是可变字符串字段,如下所示:

custom: role
custom: recruitingrole
custom: title
Run Code Online (Sandbox Code Playgroud)

同一请求中的其他自定义字段似乎更新确定.具体来说,这些似乎工作:

custom:division
custom:linkedin
custom:location
custom:bio
Run Code Online (Sandbox Code Playgroud)

当我通过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."
    }]
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Duk*_*gal 67

当然,在我完成在StackOverflow上发布的那一刻,答案就变得清晰了.

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

在此输入图像描述

  • 上面提到的文档仍然没有说明您可以在何处设置属性权限.我发现它在常规设置 - >应用程序客户端 - >显示详细信息 - >设置属性读写权限链接 (8认同)
  • 我不清楚应该如何设置这些设置.我检查了每一个盒子,它仍然无效. (6认同)
  • 很高兴看到您找到了问题的答案。此功能的文档在这里:http://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-attribute-permissions-and-scopes I可以看到它调用了属性的权限/范围,以及您收到的错误。如果您认为应该进行任何特定编辑,或者可以添加一些内容以使其更有用/更易于阅读,我鼓励您使用页面右下角的按钮提交反馈。:) (3认同)

Mar*_*zus 27

只需突出@mvandillen的答案:

常规设置 - >应用程序客户端 - >显示详细信息 - >设置属性读写权限链接


Chr*_*aks 8

对于偶然发现此问题的任何人:

与其他建议的一样,您应该启用可写属性。但是,如果这样不起作用,请确保使用custom:前缀:

await Auth.signUp({
      username: email,
      password: password,
      attributes: {
        'custom:firstName': firstName,
        'custom:lastName': lastName,
        'custom:countryCode': countryCode
      }
    })
Run Code Online (Sandbox Code Playgroud)


小智 6

要修复此错误,您需要确保您的应用有权写入您尝试写入的自定义属性。您可以通过在 Cognito 用户池控制台中检查属性和应用程序客户端的权限来执行此操作。

以下是修复错误的步骤:

  1. 转到 Cognito 用户池控制台。
  2. 单击“用户池”选项卡。
  3. 选择您遇到问题的用户池。
  4. 单击应用程序集成选项卡。
  5. 单击应用程序客户端部分。
  6. 选择您正在使用的应用程序客户端。
  7. 单击属性读写权限部分。
  8. 确保选中您尝试写入的属性旁边的复选框。
  9. 如果未选中该复选框,请选中它并保存更改。

完成此操作后,您应该能够编写自定义属性而不会出现错误。