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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在iOS中使用AWSMobileClient获取AWS Cognito用户属性?相关的知识,希望对你有一定的参考价值。

问题很简单:我使用AWS Cognito和AWS Amplify为ios应用添加了用户身份验证。我已成功实施登录和注册,但如何获取用户属性,如电子邮件,全名或电话号码?

答案

您可以在最新的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

谢谢,罗汉

另一答案

根据documentation,有几个属性助手,用于常用属性,如用户名:

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

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

AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString()
另一答案

如果您正在寻找具体的电子邮件地址,并且可能需要离线,这对您有用:

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

以上是关于如何在iOS中使用AWSMobileClient获取AWS Cognito用户属性?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:调用 AWSMobileClient initialize() 使 getUserAttributes() 不调用回调

AWSMobileClient 初始化在卸载并安装应用程序后返回用户状态“SignedIn”

方法应为虚拟类型

iOS AWS Appsync Fetch 回调从未被调用

AWS Amplify Swift API 登录 iOS 移动应用程序

etherscan如何获​​得区块链编译代码?