如何获取用于更新用户属性的AWS Cognito访问令牌?

时间:2017-07-30 05:59:47

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

我设置了用于更新用户属性的结构,在这种情况下,首选用户名用作登录的别名。

var attributes = [AWSCognitoIdentityUserAttributeType]()

let prefUsername = AWSCognitoIdentityUserAttributeType();
prefUsername?.name = "preferred_username";
prefUsername?.value = usernameField.text!;
attributes.append(prefUsername!);

let attributesRequest = AWSCognitoIdentityProviderUpdateUserAttributesRequest();
attributesRequest.userAttributes = attributes;

idProvider?.updateUserAttributes(attributesRequest)

我唯一不知道该怎么做就是获取访问令牌。我已经查看了尽可能多的文档,但我没有找到获取访问令牌的地方。

3 个答案:

答案 0 :(得分:0)

您可以使用api发起身份验证并从AuthenticationResult获取AccessToken。

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html

答案 1 :(得分:0)

    /// Function to retreive the current token for the logged in user.
    ///
    /// - Parameter completion: A completion block with an error or the token. Called back on the main thread.
    public func getJWT(completion: @escaping((_ error: Error?, _ token: AWSCognitoIdentityUserSessionToken?) -> Void)) {
        guard let user = self.pool.currentUser() else {
            let nsError = NSError(domain: "JWT Error", code: 500, userInfo: ["message": "No Logged in user"])
            completion(nsError, nil)
            return
        }
        user.getSession().continueWith { (task) -> Any? in
            DispatchQueue.main.async {
                if let error = task.error {
                    completion(error, nil)
                }else if let token = task.result?.idToken {
                    completion(nil, token)
                }else {
                    completion(nil, nil)
                }
            }
        }
    }

self.pool是您希望正确设置的AWSCognitoIdentityUserPool

答案 2 :(得分:-2)

您必须先进行身份验证才能与Cognito用户池建立会话。该会话将包含一个访问令牌,您可以将其传递给每个后续请求。我看到你正在使用低级SDK方法。以下是SignIn中的swift示例:

https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoYourUserPools-Sample/Swift