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