我已经在互联网上搜索了一段时间,但仍然没有合适的答案,因为确实有很多答案,但是我可以说其中一些已经贬值了(可能)。
当前,在我们的应用程序中,AWS Cognito用户池已经实现,我们可以直接通过用户名和密码登录。我试图弄清楚它是如何工作的,并添加了Facebook Login SDK。似乎在实现FB登录之前,我需要做很多事情。我们的客户仅向我们提供了AWS用户池ID,而我正在请求联合ID,因为我在教程和Stackoverflow主题中发现了它。而且我的项目经理坚持认为,实施FB登录应该非常简单明了,因此AWS不需要非常复杂的过程即可实现这一点。但是我想证明他们错了。 因此,我一直在搜索很多说明。我添加了以下代码块:
override func logins () -> AWSTask<NSDictionary> {
if(/*logic to determine if user is unauthenticated*/) {
return AWSTask(result:nil)
}else if (/*logic to determine if user is Facebook*/){
if let token = AccessToken.current?.authenticationToken {
return AWSTask(result: [AWSIdentityProviderFacebook:token])
}
return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
}else {
return super.logins()
}
}
这来自AWS文档:https://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html 他们根本没有提供足够的指导,所以我不明白我在做什么。然后,我找到了一些使用此方法的答案:
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: AWSRegionType.APSoutheast1,
identityPoolId: "ap-southeast-1:1f32a5d2-eb10-44da-8f07-fac95614a577",
identityProviderManager: FacebookProvider())
let configuration = AWSServiceConfiguration(
region: .APSoutheast1,
credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
credentialsProvider.getIdentityId().continueWith(block: { (task) in
guard task.error == nil else {
print(task.error)
return nil
}
// We've got a session and now we can access AWS service via default()
// e.g.: let cognito = AWSCognito.default()
return task
})
我从本指南中找到了以下代码:https://medium.com/@dkabyshev/api-less-backend-for-ios-with-aws-in-swift-part-1-cf230f080af5
因此,我之前说过,某些指南可能已经贬值了。如果您查看代码行let cognito = AWSCognito.default()
,则我试图调用同一行,但无法识别。 AWS Cognito SDK可能已经更新了它,我不知道哪个类和方法调用相同的东西。但这不是我唯一感到困惑的事情。
在此行:AWSCognitoIdentityUserPool(forKey: "userpool")
中,登录时应该已经有一个currentUser()
,但是在使用FB时则没有。
因此,我的最后一个问题是,在credentialsProvider.getIdentityId().continueWith(block:)
之后,我应该使用什么代码来继续“登录”并获得会话?我做对了吗?非常感谢你!