如何在iOS上正确实现AWS Cognito和Facebook集成?

时间:2018-10-29 06:14:47

标签: ios facebook amazon-web-services amazon-cognito

我已经在互联网上搜索了一段时间,但仍然没有合适的答案,因为确实有很多答案,但是我可以说其中一些已经贬值了(可能)。

当前,在我们的应用程序中,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:)之后,我应该使用什么代码来继续“登录”并获得会话?我做对了吗?非常感谢你!

0 个答案:

没有答案