AWS Cognito iOS.注销后出现未经身份验证的错误



我使用AWS Cognito,通过MobileHub与iOS应用程序集成,通过Facebook登录。一切都很好,直到我注销现有身份并尝试使用另一个FB帐户(甚至使用相同的帐户)登录
在这种情况下,每次我调用任何AWS Lambda:时,都会出现此错误

AWSiOSSDK v2.4.9[错误]AWSCredentialsProvider.m行:577。
[AWSCognitoCredentialsProvider-credentials]
无法刷新。错误为[Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8"(null)"UserInfo={__type=NotAuthorizedException,message=此身份池不支持未经身份验证的访问。}]

但如果我终止并重新启动应用程序,一切都会恢复正常。

此错误源自此处:

通过阅读AWS SDK代码,我看到,之所以会发生这种情况,是因为cognito身份无法从以下凭据提供商获得登录:

我想这是意料之中的事,因为我已经注销了。但问题是,即使在登录FB AWS后,我仍然认为自己未经授权。从StackOverflow上的类似问题中,我看到,过去人们在AWSCognitoCredentialsProvider上手动设置登录字典。但现在该属性已被弃用,其他类似的属性都是只读的。

这是我在AppDelegate中的AWS设置didFinishLaunchingWithOptions方法:

let cred = AWSCognitoCredentialsProvider(regionType: .euWest1, identityPoolId: "POOLID")
let config = AWSServiceConfiguration(region: .euWest1, credentialsProvider: cred)
AWSServiceManager.default().defaultServiceConfiguration = config
if let config = config {
config.timeoutIntervalForRequest = 30
config.timeoutIntervalForResource = 30
config.maxRetryCount = 3
AWSLambdaInvoker.register(with: config, forKey: "key")
}
let mapperConfiguration = AWSDynamoDBObjectMapperConfiguration()
mapperConfiguration.saveBehavior = .updateSkipNullAttributes
AWSDynamoDBObjectMapper.register(with: config!, objectMapperConfiguration: mapperConfiguration, forKey: "updateObjectMapper")

这是注销代码:

AWSIdentityManager.defaultIdentityManager().logout { (result, error) in
if let cp = AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider as? AWSCognitoCredentialsProvider {
cp.clearKeychain()
}
// Open login screen
}

请注意,我尝试了清除钥匙扣和不这样做。结果是一样的。

我真的很感激任何帮助
致以最良好的问候,Alex

您在logins方法的实现中这样做吗?

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken];
if(fbToken){
NSString *token = fbToken.tokenString;
return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }];
}else{
return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login"
code:-1
userInfo:@{@"error":@"No current Facebook access token"}]];
}
}

更多详细信息。

相关内容

  • 没有找到相关文章