我正在尝试将 aws 用户池集成到我的项目中。我设法使用电子邮件和密码进行正常登录,但我需要使用 Facebook 添加登录。
根据我在文档中阅读的内容,为此我需要在联合身份中创建一个身份池。我创建了一个并为身份验证提供程序添加了以下配置:- 在 Facebook 选项卡中添加我的 Facebook 应用程序 ID,- 在 Cognito 选项卡中为我的用户池添加我的用户池 ID 和应用程序客户端 ID。
在我的用户池中,在来自联邦的身份提供者中,我选择 Facebook,为此我添加了我的 Facebook 应用程序 ID 和应用程序密码。
在我的应用程序中,我实现了一个 AWSIdentityProviderManager,其中包含:
class CognitoSocialProvider: AWSIdentityProviderManager {
func logins() -> AWSTask<NSDictionary> {
if let token = FBSDKAccessToken.current() {
return AWSTask(result: [AWSIdentityProviderFacebook:token.tokenString])
}
return AWSTask(error:NSError(domain: kCognitoFacebookDomainError, code: -1 , userInfo: [kCognitoFaceook : kCognitoFacebookInvalidAccessToken]))
}
}
这是我的 Facebook 登录代码:
let loginManager = FBSDKLoginManager()
let permisions = [kCognitoFacebookPublicProfil, kCognitoFacebookEmail]
loginManager.logIn(withReadPermissions: permisions,
from: parentVC) { (result, error) in
if (error != nil) {
failure(error! as NSError)
} else if (result?.isCancelled == true){
failure(NSError())
} else {
let socialProvider = CognitoSocialProvider()
provider = AWSCognitoCredentialsProvider(regionType: REGION,
identityPoolId: IDENTITY_POOL,
identityProviderManager: socialProvider)
let serviceConfiguration = AWSServiceConfiguration(region: REGION, credentialsProvider: provider)
AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration
provider.clearKeychain()
provider.clearCredentials()
provider.credentials().continueWith { (task) -> Any? in
DispatchQueue.main.async(execute: {
if let error = task.error as NSError? {
failure(error)
} else {
let response = task.result! as AWSCredentials
success(CognitoFacebookSession(credentials: response))
}
})
return nil
}
}
登录工作,但是当我在用户组部分查看我的用户池时,我看不到那里的用户。
有没有其他解决方案来集成 Facebook 登录,只使用用户池而不使用身份池?