Cognito isSigned В проблеме задержки после успешного входа в систему

В приложении для iOS используется AWS Cognito.

Внутри didCompleteStepWithError(_ error: Error?) метод, у меня проблемы с isSignedIn свойство, которое не сразу верно после успешного входа в систему.

Когда я сразу проверяю:

userPool.currentUser?.isSignedIn // false

Но если я задержу проверку:

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
    print(userPool.currentUser?.isSignedIn) // true
})

1) Почему isSignedIn свойство не сразу верно?

2) Как с этим справиться, если мне нужно сделать getDetails() для того, чтобы обновить пользовательский интерфейс? Это проблема с момента звонка getDetails() с isSignedIn Значение false приведет к тому, что SDK снова запустит процесс аутентификации.

0 ответов

Я сталкивался с той же самой проблемой, и путь, которым я прошел, был следующим:

Сразу после входа, когда у вас есть имя пользователя и пароль, в методе делегата Cognito: didCompleteStepWithError, вызовите этот метод:

- (AWSTask<AWSCognitoIdentityUserSession *> *)getSession:(NSString *)username
                                                password:(NSString *)password
                                          validationData:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)validationData;

Код будет примерно таким:

self.user.getSession(username, password:password).continueWithBlock(block: { (result) -> Any? in
       if let idToken = result.result?.idToken{
           //YOU HAVE THE TOKEN
           if self.user?.isSignedIn ?? false{
               print("user finally signed in")
           }
           else{
               print("something weird happened")
           }
       }
})

для меня это сделало правильный статус пользователя. Определенно не идеал, но он сделал работу для меня.

Другие вопросы по тегам