我想使用Facebook,Google和用户池(电子邮件)提供具有联合身份的登录名。在Cognito用户池注册成功后,我无法获取identityId。错误是“未设置身份验证委托”。 我不想将委托设置为用户池。我设法注册了不需要它,我只想获取identityId。
这可以通过设置委托来完成吗?我在做错什么吗?
func setupAWS(){
loginProvider = LoginProvider()
userPoolConfig()
credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "identityPoolId", identityProviderManager: userPool)
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
}
func userPoolConfig(){
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "clientid", clientSecret: "clientsecret", poolId: "poolid")
AWSCognitoIdentityUserPool.register(with: configuration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")
userPool = AWSCognitoIdentityUserPool(forKey: "UserPool")
}
//logins from LoginProvider
func logins() -> AWSTask<NSDictionary> {
switch type {
case .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"]))
default:
return userService.userPool!.logins()
}
}
//After signup
func verificationCodeProvided(code: String){
presenter!.user!.confirmSignUp(code).continueWith(block: { (response) -> Any? in
if response.error != nil {
//fail
} else {
print("Signup succeeded")
print("Id: \(self.presenter?.userService.credentialsProvider?.identityId)") //returns nil
self.presenter!.setUser()
}
return nil
})
}
//trying to get identity id
func setUser(){
self.userService.credentialsProvider!.getIdentityId().continueWith(block: { (task) -> Any? in
if (task.error != nil) {
print("Error: " + task.error!.localizedDescription) // prints "Authentication delegate not set" for user pool login
}
else {
let cognitoId = task.result!
print("Cognito id: \(cognitoId)") //Works for Facebook
}
return nil
})
}