我正在尝试使用 AWSCognito 使用 Facebook Access Token 登录。
我的身份池已设置,我有Facebook访问令牌。
不幸的是,这方面的文档非常有限。 有没有人成功地让Facebook用户使用AWSCognito登录?
到目前为止,我有;
let provider: Dictionary = [AWSIdentityProviderFacebook : accessToken.authenticationToken]
let credentialProvider = AWSCognitoCredentialsProvider(regionType: .EUWest2, identityPoolId: POOL_IDENTITY_STRING)
我假设我需要在某个地方传递提供程序。
我试图这样做;
credentialProvider.identityProvider.logins() = provider
但我得到:"无法分配给值:函数调用返回不可变值">
是的,我最近做了这样的事情。
您需要使用身份提供程序管理器初始化凭据提供程序。
credentialsProvider = AWSCognitoCredentialsProvider(
regionType: xxx,
identityPoolId: yyy,
identityProviderManager: idpm)
但是,不能只传入字典["graph.facebook.com" : <access token>]
作为第三个参数。
你需要一些符合AWSIdentityProviderManager协议的东西,它基本上只返回一个返回字典的任务。
我最终为此制作了一个简单的包装类,见下文。
import AWSCognito
class myIdentityProvider: NSObject, AWSIdentityProviderManager {
var keytokens: [String:String]?
init (logins: [String:String]) {
keytokens = logins
}
func logins () -> AWSTask<NSDictionary> {
let task = AWSTask(result: keytokens as AnyObject?)
return task as! AWSTask<NSDictionary>
}
}
因此,您的代码将被重写:
let provider: Dictionary = [AWSIdentityProviderFacebook : accessToken.authenticationToken]
let idpm = myIdentityProvider(provider)
let credentialProvider = AWSCognitoCredentialsProvider(
regionType: .EUWest2,
identityPoolId: POOL_IDENTITY_STRING,
identityProviderManager: idpm)