我设置了用于更新用户属性的结构,在这种情况下,首选用户名用作登录的别名。
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)
我唯一不知道该怎么做就是获取访问令牌。我已经查看了尽可能多的文档,但我没有找到获取访问令牌的地方。
答案 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