如何访问AWS Cognito用户池中定义的用户自定义属性?

时间:2016-08-28 17:42:37

标签: objective-c attributes amazon-cognito

我在AWS Cognito用户池的用户配置中添加了一些自定义属性。我的应用程序在objective-c中类似于示例项目CognitoYourUserPoolsSample。一切正常,我可以毫无问题地登录/注册。

但是,我不知道如何访问和设置我在用户池配置中添加的所有用户自定义属性。例如,我可以从响应对象AWSCognitoIdentityProviderGetUserResponse访问默认属性值。它们存储在_userAttributes属性中(例如电话,电子邮件等)。

我的问题是:

  • 自定义属性存储在哪里?

  • 在注册过程中设置它们的正确方法是什么?

当我尝试使用与默认属性相同的方法注册自定义属性时出现以下错误:

// add custom attributes
AWSCognitoIdentityUserAttributeType * subscriptionType = [AWSCognitoIdentityUserAttributeType new];
subscriptionType.name = @"subscriptionType";
subscriptionType.value = @"Premium";
[attributes addObject:subscriptionType];

Here is the error I get.

responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body:
{"__type":"NotAuthorizedException","message":"A client attempted to write unauthorized attribute"}

谢谢!

2 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 自定义属性由Cognito内部存储,自定义属性可以从DescribeUserPool调用的响应中看到。
  2. 应该从Cognito控制台设置池创建。它们不允许从客户端设置,这就是您看到问题的原因。
  3. 谢谢

答案 1 :(得分:0)

正如我在问题中发现的那样: Signup with custom attributes in Cognito user pools 要设置自定义属性的值,您必须为其设置写入权限。 打开Amazon Cognito控制台 - > YourPool - >常规设置 - >应用客户端 - >显示详细信息 - >设置属性读取和写入权限并激活自定义属性的复选框。

同样在代码属性名称中应包含前缀' custom:' 即subscriptionType.name = @" custom:subscriptionType&#34 ;;这些值显示在AWS控制台中。