AWS Cognito用户池+ Facebook登录iOS

时间:2018-08-19 12:41:32

标签: ios swift facebook amazon-cognito aws-cognito

我已经开始将AWS Cognito用户池集成到我的应用程序中,并且注册+登录有效(我已按照本教程:https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-integrating-user-pools-ios.html

现在,我正在努力正确整合Facebook登录信息。这就是我要做的:

在用户成功使用Facebook登录后(使用facebook SDK),我得到令牌并调用此函数:

func signInFacebook(){

    let customProviderManager = CustomIdentityProvider(tokens: nil)

    self.credentialsProvider = AWSCognitoCredentialsProvider(
        regionType:CognitoIdentityUserPoolRegion,
        identityPoolId: CognitoIdentityPoolId,
        identityProviderManager: customProviderManager)

    let configuration = AWSServiceConfiguration(region:CognitoIdentityUserPoolRegion, credentialsProvider: self.credentialsProvider!)
    AWSServiceManager.default().defaultServiceConfiguration = configuration
}

我的CustomIdentityProvider类看起来像这样:

class CustomIdentityProvider: NSObject, AWSIdentityProviderManager {
var tokens : NSDictionary?

init(tokens: NSDictionary?) {
    self.tokens = tokens
}

func logins() -> AWSTask<NSDictionary> {
    if let fbToken = AccessToken.current?.authenticationToken {
        return AWSTask(result: [AWSIdentityProviderFacebook: fbToken])
    } else if let googleToken = GIDSignIn.sharedInstance().currentUser.authentication.idToken {
        return AWSTask(result: [AWSIdentityProviderGoogle: googleToken])
    }

    return AWSTask(error:NSError(domain: "Social login", code: -1 , userInfo: ["Social login" : "No current social access token"]))
}

}

在致电signInFacebook()之后,我也致电

self.credentialsProvider?.credentials().continueOnSuccessWith { (task:AWSTask<AWSCredentials>) -> Any? in
                print("credentials: \(task.result!)")
                return nil
}

,它会在日志中打印一些看起来不错的数据。 但是由于某种原因,它似乎无法将所有内容正确地链接在一起。 当我调用后端以获取一些数据时,通常会这样:

我调用self.user?.getSession().continueOnSuccessWithuserAWSCognitoIdentityUser的实例),并在闭包内部构建请求,并将令牌放在标头中。但是,如果没有令牌,SDK将显示我的登录屏幕。这就是一直发生的事情。我希望在使用Facebook进行社交登录成功后,user对象将使用正确的令牌进行更新。我在做什么错了?

0 个答案:

没有答案
相关问题