AWS Mobile Hub Sign - Как найти пользовательский саб на iOS - PullRequest
0 голосов
/ 03 июля 2018

Я включил AWS Mobile Hub Cognito Sign-In, как описано в Добавьте AWS Mobile User SignIn для iOS Swift, и он работает, как и ожидалось, однако я не могу найти способ получить access_token вошедшего в систему пользователя, или, более конкретно, подпрограмма пользователя из расшифрованного access_token.

Я смог добиться этого для Android, реализовав обратный вызов для AuthHandler, который вызывает метод с именем onSuccess и передает ему объект AuthUserSession, который содержит auth_token.

Из документов видно, что для iOS есть нечто похожее с реализацией AWSSignInDelegate, но я не могу понять, присутствует ли access_token или нет в каком-либо из параметров метода делегата. Может быть, кто-то более знакомый с ним (или отладчик) может заполнить пробелы?

class AppDelegate: UIResponder, UIApplicationDelegate, AWSSignInDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        AWSSignInManager.sharedInstance().delegate = self
        return AWSMobileClient.sharedInstance().interceptApplication(application, didFinishLaunchingWithOptions: launchOptions)
    }

    ...

    func onLogin(signInProvider: AWSSignInProvider, result: Any?, error: Error?) {
        // How to find the auth_token or sub from here?
    }
}

Параметр result метода onLogin кажется наиболее вероятным кандидатом на то, что мне нужно, но я не могу понять, как получить к нему доступ. Если есть какой-то другой способ получить его, я тоже буду к этому открыт.

1 Ответ

0 голосов
/ 09 июля 2018

Вы можете использовать одноэлементный объект AWSCognitoUserPoolsSignInProvider, чтобы получить объект Cognito User, а затем перейти к атрибутам, чтобы получить атрибут user-sub.

AWSCognitoIdentityUser *user = [[[AWSCognitoUserPoolsSignInProvider sharedInstance] getUserPool] currentUser];

NSString *mySub;

[[user getDetails] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserGetDetailsResponse *> * _Nonnull task) {
    if(!task.error){
        AWSCognitoIdentityUserGetDetailsResponse *response = task.result;
        NSArray<AWSCognitoIdentityProviderAttributeType*> *userAttributes = response.userAttributes;
        for (AWSCognitoIdentityProviderAttributeType *attr in self.userAttributes) {
            if ([attr.name isEqualToString:@"sub"]) {
                mySub = attr.value;
            }
        }
    } else {
        NSLog(@"Error fetching Cognito User Attributes: %@", task.error.localizedDescription);
    }
}];
...