Почему iOS AWS Cognito не дает ошибок при входе в систему, но не выполняет свои функции? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь заставить работать мой логин Cognito.Проблема в том, что он не работает, и я не получаю сообщения об ошибках от AWS или XCode.Я реализовал его в соответствии с учебным пособием и примером кода AWS (может быть, неправильно?).Я попытался понять, как работает код, добавив пару NSlog в функции Cognito AWS, чтобы я знал, выполняются ли они, но они также не отображаются в моей консоли.Почему эти функции не запускаются даже без отправки ошибки?Есть ли что-то очевидное, что я забываю?

Вот основные части моего кода

// loginviewcontroller.h
@import AWSCognitoIdentityProvider;

@interface LoginViewController : UIViewController <AWSCognitoIdentityPasswordAuthentication>
@property (nonatomic, strong) NSString * usernameText;

@end

loginviewcontroller.m file:

// loginviewcontroller.m

@property (nonatomic, strong) AWSTaskCompletionSource<AWSCognitoIdentityPasswordAuthenticationDetails*> *passwordAuthenticationCompletion;

- (IBAction)signInPressed:(UIButton *)sender {
self.passwordAuthenticationCompletion.result = [[AWSCognitoIdentityPasswordAuthenticationDetails alloc] initWithUsername:self.userName.text password:self.password.text];
NSLog(@"button pressed");};

-(void) getPasswordAuthenticationDetails: (AWSCognitoIdentityPasswordAuthenticationInput *) authenticationInput  passwordAuthenticationCompletionSource: (AWSTaskCompletionSource<AWSCognitoIdentityPasswordAuthenticationDetails *> *) passwordAuthenticationCompletionSource {
//keep a handle to the completion, you'll need it continue once you get the inputs from the end user
self.passwordAuthenticationCompletion = passwordAuthenticationCompletionSource;}


-(void) didCompletePasswordAuthenticationStepWithError:(NSError*) error {
NSLog(@"didCompletePasswordAuthenticationStepWithError");

dispatch_async(dispatch_get_main_queue(), ^{
    //present error to end user
    if(error){
        NSLog(@"Error");
        [[[UIAlertView alloc] initWithTitle:error.userInfo[@"__type"]
                                    message:error.userInfo[@"message"]
                                   delegate:nil
                          cancelButtonTitle:nil
                          otherButtonTitles:@"Ok", nil] show];
    }else{
        NSLog(@"Success");

        //dismiss view controller
        [self dismissViewControllerAnimated:YES completion:nil];
    }
});

appdelegate.h

//appdelegate.h
@import AWSCognitoIdentityProvider;

@interface AppDelegate : UIResponder <UIApplicationDelegate, AWSCognitoIdentityInteractiveAuthenticationDelegate>

@property(nonatomic,strong) LoginViewController* LoginViewController;

appdelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    

    //setup AWS service config
    AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];

    //create a pool
    AWSCognitoIdentityUserPoolConfiguration *configuration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"xxxxxx" clientSecret:@"xxxxxxx" poolId:@"us-east-1_xxxxxx"];

    [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:configuration forKey:@"us-east-1_xxxxx"];

    AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"us-east-1_xxxxxx"];


    pool.delegate = self;


    return YES;
}

-(id<AWSCognitoIdentityPasswordAuthentication>) startPasswordAuthentication{
//implement code to instantiate and display login UI here
//return something that implements the AWSCognitoIdentityPasswordAuthentication protocol
NSLog(@"startpasswordauth AWS!");

return self.LoginViewController;
}

Также я не понял эту строку свойств, которая есть в образце AWS github.Обозначение * xxx я не видел раньше.Вот строка:

@property (nonatomic, strong) AWSTaskCompletionSource<AWSCognitoIdentityPasswordAuthenticationDetails*> *passwordAuthenticationCompletion;

В руководстве не упоминается, но без него

self.passwordAuthenticationCompletion.result = [[AWSCognitoIdentityPasswordAuthenticationDetails alloc] initWithUsername:self.userName.text password:self.password.text];

ошибок, что атрибут не найден.

1 Ответ

0 голосов
/ 02 мая 2019

Я тоже пробовал это, но методы делегата не работают.

Во-вторых, я пытался с этим кодом:

[AWSServiceManager.defaultServiceManager.defaultServiceConfiguration.credentialsProvider invalidateCachedTemporaryCredentials];
        AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"User"];

     AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    self.user = [delegate.pool currentUser];

[[ self.user getSession:_userName.text password:_txtPassword.text validationData:nil ] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserSession *> * _Nonnull task) {

            //success, task.result has user session
            dispatch_async(dispatch_get_main_queue(), ^{
                if(task.error || task.isCancelled) {
                    [[[UIAlertView alloc] initWithTitle:task.error.userInfo[@"__type"]
                                                message:task.error.userInfo[@"message"]
                                               delegate:self
                                      cancelButtonTitle:@"Ok"
                                      otherButtonTitles:nil] show];


                }else {

                    AWSCognitoIdentityUserSession *session = (AWSCognitoIdentityUserSession *) task.result;
                    NSString *tokenStr = [session.idToken tokenString];
                    [[NSUserDefaults standardUserDefaults]setObject:tokenStr forKey:@"token"];
                    [[NSUserDefaults standardUserDefaults]synchronize];

                    [self performSelectorOnMainThread:@selector(pushToDashbard) withObject:nil waitUntilDone:YES];



                }});

            return nil;
        }]

Если я передаю правильные учетные данные, то это дает токен, а неправильные учетные данные не дают ответа об ошибке.

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