繁体   English   中英

AWS Cognito iOS。 注销后未经身份验证的错误

[英]AWS Cognito iOS. Unauthenticated error after logout

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

AWSiOSSDK v2.4.9 [错误] AWSCredentialsProvider.m行:577。
[AWSCognitoCredentialsProvider凭证]。
无法刷新。 错误是[错误域= 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

你是在执行登录方法吗?

- (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"}]];
    }
}

更多细节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM