Пользователь, входящий в систему с помощью Amazon Cognito
Я использую Amazon Cognito User Pools
, Я пытаюсь аутентифицировать пользователя. Сначала ему / ей нужно будет ввести номер телефона и пароль, и будет отправлено SMS для аутентификации пользователя, после аутентификации пользователя ожидается Sign in
давая phonenumber
а также password
,
1.) Я хочу открыть окно регистрации пользователя, если пользователь не зарегистрирован в приложении
2.) Если приложение перешло в фоновый режим, я хочу, чтобы пользователь продолжил использовать приложение без необходимости повторного входа в систему. (В данный момент пользователю необходимо входить в систему все время, когда они уходят на задний план)
3.) Если пользователь зарегистрировал, но не прошел проверку подлинности SMS, я хочу перенаправить пользователя на страницу подтверждения
Я застрял в этом в течение почти недели. Кто-нибудь может мне помочь.
В приложении Delegate у меня есть следующий код. - (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;
}
Обратите внимание, что startPasswordAuthentication
никогда не выполняется, пока я не добавлю следующий код в APPDELEGATES
- (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;
}];
1 ответ
1) Cognito в настоящее время не предоставляет API для проверки того, что имя пользователя уже существует. Вы можете обойти это, вызвав специфичный для имени пользователя API-интерфейс и действуя на основе возвращенного исключения. Если вы думаете более локально, вы можете проверить сеанс на основе имени пользователя, чтобы увидеть, если кто-то уже вошел в систему.
2) API RefreshTokens используется для получения нового токена доступа после истечения срока действия старого. Используйте маркер обновления, который вы вернули в аутентификации, чтобы облегчить это.
3) Регистрация не дает вам доступа. При регистрации пользователя вы не получаете токен, но должны войти в систему позже. Это уже обработано.