ios - 为什么 iOS AWS Cognito 登录不产生错误,但不执行其功能?

标签 ios objective-c amazon-web-services amazon-cognito

我正在尝试让我的 Cognito 登录正常工作。 问题是它不起作用,并且我没有从 AWS 或 XCode 收到错误消息。我是按照the tutorial实现的和 AWS sample code (也许是错误的?)。我试图通过在 AWS cognito 函数中添加几个 NSlog 来了解代码的工作原理,以便我知道它们是否被执行,但它们也没有显示在我的控制台中。为什么这些函数在没有发送错误的情况下就无法运行?有什么明显的事情我忘记了吗?

这是我的代码的基本部分

// loginviewcontroller.h
@import AWSCognitoIdentityProvider;

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

@end

loginviewcontroller.m文件:

// 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];

未找到该属性的错误。

最佳答案

我也尝试过这个,但委托(delegate)方法不起作用。

其次,我尝试使用以下代码:

[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;
        }]

如果我传递了正确的凭据,那么这将提供 token ,而错误的凭据不会给出错误响应。

关于ios - 为什么 iOS AWS Cognito 登录不产生错误,但不执行其功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55504809/

相关文章:

单例中的 Objective-C 调用实例方法

ios - addChildViewController 不适合 UIViewController

objective-c - 如何在 objective-c 库中隐藏对象

MySQL 不断关闭(WordPress)

iphone - iPhone-尝试,捕获问题

ios - UIAlertView 当没有按钮按下时计数 10 秒并执行某些操作

ios - 检索 UIPreviewInteraction 关联的触摸

ios - kCLErrorDomain代码= 8“该操作无法完成。

amazon-web-services - EMR 主节点是否知道其集群 ID?

amazon-web-services - CloudFormation 查看非事件/已删除的更改集