我使用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 =此身份池不支持未经身份验证的访问。}]
但是,如果我终止并重新启动应用程序,一切正常。
此错误源自here:
从阅读AWS SDK代码我看,它发生是因为认知身份不能从凭据提供者here获取登录:
我想这是预期的,因为我已经退出了。但问题是即使登录到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
}
请注意,我尝试清除钥匙串而不是这样做。结果是一样的。
我真的很感激任何帮助! 最好的祝福, 亚历
答案 0 :(得分:0)
您是否在执行登录方法时执行此操作?
- (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"}]];
}
}