我正在使用带有Amazon's Swift sample app的AWS Cognito用户池。我可以使用given_name
属性创建用户,但以后检索given_name
的方法并不明显。
Amazon示例将属性检索为AWSCognitoIdentityUserGetDetailsResponse
,然后将其转储到屏幕上。但是,我无法找到AWSCognitoIdentityUserGetDetailsResponse
的文档。它似乎是一个数组,但对我来说,如何从返回的属性中提取given_name
并不明显。人们会认为将属性作为字典归还是一个好主意,但亚马逊并没有这样做。
任何指针?
编辑:为了澄清,返回的是AttributeType
个对象的数组。 Cognito示例中的代码显示了所有返回的属性:
override func tableView(_ tableView: UITableView, cellForRowAt
indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "attribute", for: indexPath)
let userAttribute = self.response?.userAttributes![indexPath.row]
cell.textLabel!.text = userAttribute?.name
cell.detailTextLabel!.text = userAttribute?.value
return cell
}
这是原始回复:
Response body:
{"UserAttributes":[{"Name":"sub","Value":"XXXXXXXX-XXXX-XXXX-XXXX-
XXXXXXXXXXXX"},{"Name":"email_verified","Value":"true"},
{"Name":"given_name","Value":"Bob"},
{"Name":"email","Value":"bob@example.com"}],"Username":"AAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE"}
如果没有遍历整个数组,如何拔出given_name
对我来说并不明显。
答案 0 :(得分:1)
此处不是iOS专家,但从我在SDK implementation中看到的内容看来,它们copy来自AWSCognitoIdentityProviderGetUserResponse的详细信息,documentation显示它具有用户属性以地图的形式。您是否尝试在响应中查找userAttributes
数组?
此外,原始GetUser API表示UserAttributes应该在响应中。
答案 1 :(得分:0)
以下是使用getDetails()
访问userAttributes
self.user?.getDetails().continueOnSuccessWith { (task) -> AnyObject? in // handle all auth setup
DispatchQueue.main.async(execute: {
self.response = task.result // AWSCognitoIdentityUserGetDetailsResponse
if let attributes = task.result?.userAttributes { // https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html
for attribute in attributes {
print(attribute.name, attribute.value)
if attribute.name == "name" {
// ... do something with name
}
}
}
})
return task
}
}