Задача c Как обновить токен доступа с помощью Обновить токен - PullRequest
0 голосов
/ 30 ноября 2018

Я использую пул пользователей Cognito для аутентификации пользователей в моей системе.Успешная аутентификация дает идентификатор токена (JWT), токен доступа (JWT). Каждый час TokenExpiration.У меня вопрос, как только истекает срок действия моего токена доступа, как мне использовать сохраненный токен обновления, чтобы обновить свой токен снова? Это мой код.

- (void)loginAWSMethod {
    NSString *emailId = @"the email";
    NSString *pwdTxt = @"the password";

    NSLog(@"entered the login method %@ %@",emailId,pwdTxt);
    AWSCognitoIdentityUser *user = [pool getUser:emailId];
    [[user getSession:emailId password:pwdTxt validationData:nil]
     continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserSession *> * _Nonnull task)
     {
         if (task.error) {
             dispatch_async(dispatch_get_main_queue(), ^{
                 dispatch_async(dispatch_get_main_queue(), ^{
                     NSLog(@"ERROR CATCHED++++++");
                     UIAlertController * alert = [UIAlertController
                                                  alertControllerWithTitle:@"Incorrect email or password."
                                                  message:@""
                                                  preferredStyle:UIAlertControllerStyleAlert];

                     UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
                                                 {
                                                 }];

                     [alert addAction:yesButton];
                     [self presentViewController:alert animated:YES completion:nil];
                 });

                 [self removeWaitingProgress];
             });

         }else{
             NSLog(@"the result is %@",task.result);
             AWSCognitoIdentityUserSession *response1 = task.result;
             token = response1.accessToken.tokenString;
             NSLog(@"the token is %@",token);
             [[user getDetails] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserGetDetailsResponse *> * _Nonnull task) {
                 AWSCognitoIdentityUserGetDetailsResponse *response = task.result;
                 for (AWSCognitoIdentityUserAttributeType *attribute in response.userAttributes) {
                     //print the user attributes
                     NSLog(@"Attribute: %@ Value: %@", attribute.name, attribute.value);
                     if([attribute.name isEqualToString:@"sub"]){
                         cognitoID = attribute.value;
                     }
                     [defaults setValue:token forKey:@"token"];
                     [defaults setValue:@"yes" forKey:@"isLoggedIn"];
                     [defaults synchronize];
                     dispatch_async(dispatch_get_main_queue(), ^{
                         [self removeWaitingProgress];
                         [self gotoDashborad];
                     });
                 }
                 return nil;
             }];
         }
         return  nil;
     }];
}

1 Ответ

0 голосов
/ 30 ноября 2018

Вы можете просто вызвать -[AWSCognitoIdentityUser getSession], который за кулисами либо вернет текущий действующий токен доступа, либо заменит токен обновления на новый токен доступа:

-(nullable NSString *)accessTokenStringForCurrentUser {
    AWSCognitoIdentityUser *currentUser = [pool currentUser];
    __block NSString *tokenString;
    // `getSession` automatically exchanges the refresh token for a valid access token if needed
    [[[currentUser getSession] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserSession *> * _Nonnull task) {
        // (Error handling not shown)
        if (task.result) {
            AWSCognitoIdentityUserSessionToken *accessToken = task.result.accessToken;
            tokenString = accessToken.tokenString;
        }
        return nil;
    }] waitUntilFinished];
    return tokenString;
}

Возможно, вы также захотите взглянуть на пример приложения Cognito UserPools , в котором есть образцы Objective C для использования UserPools.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...