如何在iOS中使用AWSMobileClient获取AWS Cognito用户属性?

时间:2018-12-06 18:13:31

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

问题非常简单:我已使用AWS Cognito和AWS Amplify将用户身份验证添加到iOS应用。我已经成功实现了登录和注册,但是如何获取用户属性,例如电子邮件,全名或电话号码?

5 个答案:

答案 0 :(得分:2)

您可以在最新的SDK版本2.8.x中将getUserAttributes与以下API结合使用:

public func getUserAttributes(completionHandler: @escaping (([String: String]?, Error?) -> Void))

您可以在此处找到源代码:

https://github.com/aws-amplify/aws-sdk-ios/blob/master/AWSAuthSDK/Sources/AWSMobileClient/AWSMobileClientExtensions.swift#L532

谢谢, 罗汉

答案 1 :(得分:1)

对于documentation,有几个属性帮助器可用于用户名之类的常见属性:

AWSMobileClient.getInstance().getUsername()
AWSMobileClient.getInstance().isSignedIn()
AWSMobileClient.getInstance().getIdentityId()

您还可以获取JWT令牌,然后提取所有用户属性:

AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString()

答案 2 :(得分:0)

如果您要专门查找电子邮件地址,并且可能需要离线查找,则该方法对您有用:

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报告。

答案 3 :(得分:0)

更新:

对于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"])
        }
     }
}

答案 4 :(得分:-2)

我也在Android(Kotlin)上进行了研究。

// retrieve username
val username = AWSMobileClient.sharedInstance().username

使用“电子邮件”和“密码”登录时,“用户名”为“电子邮件”。

另一方面,在iOS(Swift)的情况下,即使您使用“电子邮件”和“密码”登录,“用户名”实际上也是cognito用户池的“用户名”。

这真是令人困惑...