1

在使用 AWS Cognito 的 iOS 应用程序中。

在该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()以更新用户界面,该如何处理?这是一个问题,因为仍然为 false 的调用getDetails()isSignedIn导致 SDK 再次启动身份验证过程。

4

1 回答 1

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")
           }
       }
})

对我来说,这样做使用户状态正确。绝对不理想,但它为我完成了工作。

于 2019-03-26T05:13:13.637 回答