我尝试使用AWSCognito登录Facebook Access令牌。
我的身份库已设置&我有Facebook Access Token。
不幸的是,文档对此非常有限。有没有人成功让Facebook用户使用AWSCognito登录?
到目前为止,我有;
let provider: Dictionary = [AWSIdentityProviderFacebook : accessToken.authenticationToken]
let credentialProvider = AWSCognitoCredentialsProvider(regionType: .EUWest2, identityPoolId: POOL_IDENTITY_STRING)
我假设我需要在某个地方传递提供者。
我试图这样做;
credentialProvider.identityProvider.logins() = provider
但我得到:"无法分配值:函数调用返回不可变值"
答案 0 :(得分:0)
是的,我最近做了这样的事情。
您需要使用身份提供程序管理器初始化凭据提供程序。
const cont = x =>
k => k (x)
const infix = f => x =>
cont (f (x))
const apply = x => f =>
cont (f (x))
const identity = x =>
x
const empty =
Symbol ()
const evaluate = ([ token = empty, ...rest], then = cont (identity)) => {
if (token === empty) {
return then
}
else {
switch (token) {
case "+":
return evaluate (rest, then (infix (x => y => x + y)))
case "x":
return evaluate (rest, then (infix (x => y => x * y)))
case "/":
return evaluate (rest, then (infix (x => y => x / y >> 0)))
default:
return evaluate (rest, then (apply (Number (token))))
}
}
}
const parse = program =>
program.split (/(\D+)/)
const exec = program =>
evaluate (parse (program)) (console.log)
exec ('') // 0
exec ('1') // 1
exec ('1+2') // 3
exec ('1+2+3') // 6
exec ('1+2+3x4') // 24
exec ('1+2+3x4/2') // 12
exec ('12+345x6/789') // 2
但是,您不能只将字典credentialsProvider = AWSCognitoCredentialsProvider(
regionType: xxx,
identityPoolId: yyy,
identityProviderManager: idpm)
作为第三个参数传入。
您需要符合AWSIdentityProviderManager协议的东西,它基本上只返回返回字典的任务。
我最终为此制作了一个简单的包装类,见下文。
["graph.facebook.com" : <access token>]
那么,您的代码将被重写:
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>
}
}