在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()
以更新UI,该如何处理?这是一个问题,因为使用isSignedIn
调用getDetails()
仍然false会导致SDK再次启动身份验证过程。
我遇到了同样的问题,我通过的方式是:
登录后,当您拥有用户名和密码时,在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")
}
}
})
对我而言,这样做的用户状态正确。绝对不是理想的,但这对我来说是一份工作。