0

を使用してAmazon Cognito User Poolsいます。ユーザーを認証しようとしています。最初に、電話番号とパスワードを入力する必要があります。ユーザーを認証するために SMS が送信されます。ユーザーを認証する際にはSign inphonenumberpassword.

1.) ユーザーがアプリに登録されていない場合、ユーザー登録画面をポップアップ表示したい

2.) アプリがバックグラウンドになった場合、ユーザーは再度ログインしなくてもアプリを使用できるようになります。(現時点では、ユーザーはバックグラウンドに移動するときに常にサインインする必要があります)

3.) ユーザーが登録しているが SMS 検証を認証していない場合、ユーザーを確認ページにリダイレクトしたい

私はこれで1週間近く立ち往生しています。誰か助けてくれませんか。

アプリデリゲートには、次のコードがあります。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

..

        AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];



        //create a pool

        AWSCognitoIdentityUserPoolConfiguration *configuration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"XXX" clientSecret:@"XXX" poolId:@"us-east-1_XXX"];

        [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:configuration forKey:@"UserPool"];

        //AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];





        [AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose;





        AWSCognitoIdentityUserPool *pool =[AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];



        pool.delegate = self;

}



//set up password authentication ui to retrieve username and password from the user

-(id<AWSCognitoIdentityPasswordAuthentication>) startPasswordAuthentication {

//    

    if(!self.navController){

        self.navController = [[UIForViewController getStoryboard] instantiateViewControllerWithIdentifier:@"signupSegueID"];

    }

//    if(!self.signInViewController){

//        self.signInViewController = self.navigationController.viewControllers[0];

//    }



    dispatch_async(dispatch_get_main_queue(), ^{

        //rewind to login screen



        //display login screen if it isn't already visibile

        if(!(self.navController.isViewLoaded && self.navController.view.window))

        {

            [self.window.rootViewController presentViewController:self.navController animated:YES completion:nil];

        }

    });

    return nil;


}

startPasswordAuthenticationAPPDELEGATES に次のコードを追加しない限り、決して実行されないことに注意してください - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

[[self.user getDetails] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserGetDetailsResponse *> * _Nonnull task) {
    if (task.error) {
        //
        NSLog(@"Error ");
        [[[UIAlertView alloc] initWithTitle:task.error.userInfo[@"__type"]
                                    message:task.error.userInfo[@"message"]
                                   delegate:self
                          cancelButtonTitle:@"Ok"
                          otherButtonTitles:nil] show];
        return  nil;
    }
    AWSCognitoIdentityUserGetDetailsResponse *response = task.result;



    for (AWSCognitoIdentityUserAttributeType *attribute in response.userAttributes) {
        //print the user attributes
        NSLog(@"Attribute: %@ Value: %@", attribute.name, attribute.value);
    }
    return nil;
}];
4

1 に答える 1

0

1) Cognito は現在、ユーザー名が既に存在するかどうかを確認するための API を公開していません。ユーザー名固有の API を呼び出し、返された例外に基づいて対処することで、これを回避できます。もっとローカルに考えている場合は、ユーザー名に基づいてセッションをチェックして、誰かが既にサインインしているかどうかを確認できます。

2) RefreshTokens API は、古いトークンの有効期限が切れた後に新しいアクセス トークンを取得するために使用されます。これを容易にするために、認証で返された更新トークンを使用します。

3) 登録してもアクセスできるわけではありません。ユーザー登録時にトークンは取得されませんが、後でログインする必要があります。これはすでに処理されています。

于 2016-07-19T22:17:00.093 に答える