【发布时间】:2019-05-08 12:05:38
【问题描述】:
问题很简单:我使用 AWS Cognito 和 AWS Amplify 向 iOS 应用程序添加了用户身份验证。我已经成功实现了登录和注册,但是如何获取邮箱、全名或电话号码等用户属性呢?
【问题讨论】:
标签: ios amazon-web-services amazon-cognito
问题很简单:我使用 AWS Cognito 和 AWS Amplify 向 iOS 应用程序添加了用户身份验证。我已经成功实现了登录和注册,但是如何获取邮箱、全名或电话号码等用户属性呢?
【问题讨论】:
标签: ios amazon-web-services amazon-cognito
更新:
对于 AWSMobileClient ~> 2.12.0,您可以按如下方式获取用户属性。
AWSMobileClient.default().getUserAttributes { (attributes, error) in
if(error != nil){
print("ERROR: \(error)")
}else{
if let attributesDict = attributes{
print(attributesDict["email"])
print(attributesDict["given_name"])
}
}
}
【讨论】:
根据documentation,有几个用于常见属性(如用户名)的属性助手:
AWSMobileClient.getInstance().getUsername()
AWSMobileClient.getInstance().isSignedIn()
AWSMobileClient.getInstance().getIdentityId()
你也可以获取 JWT 令牌,然后拉出任何用户属性:
AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString()
【讨论】:
您可以在最新的 SDK 版本2.8.x 中将 getUserAttributes 与以下 API 一起使用:
public func getUserAttributes(completionHandler: @escaping (([String: String]?, Error?) -> Void))
你可以在这里找到源代码:
【讨论】:
如果您正在寻找特定的电子邮件地址,并且可能需要离线进行,这对您有用:
AWSMobileClient.sharedInstance().getTokens { (tokens, error) in
if let error = error { print(error.localizedDescription) }
if let tokens = tokens {
let email = tokens.idToken?.claims?["email"] as? String
//completionHandler(email)... etc.
}
虽然AWSMobileClient.sharedInstance().getUsername() 很方便,但即使用户池设置为使用电子邮件作为用户名,它也会返回用户池用户的 ID。我认为这是一个错误,但尚未向 AWS 报告。
【讨论】:
我也在 android (Kotlin) 上研究它。
// retrieve username
val username = AWSMobileClient.sharedInstance().username
当您使用“电子邮件”和“密码”登录时,“用户名”为“电子邮件”。
另一方面,在 iOS (Swift) 的情况下,“用户名”实际上是 cognito 用户池的“用户名”,即使您使用“电子邮件”和“密码”登录。
这太令人困惑了......
【讨论】: