如何使用Ruby为facebook graph api创建appsecret_proof?
Facebook在here中有一个例子。我还在这个PHP中看到了红宝石中的一个例子。
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), <app_secret>, <user_access_token>)
但是我收到了Invalid appsecret_proof provided in the API argument
从facebook示例中不清楚$app_access_token
是什么,应用程序ID是什么?
如何在ruby中创建appsecret_proof
?
更新代码:
secret = OpenSSL::HMAC.hexdigest('SHA256', ENV["FACEBOOK_SECRET_ID"], app_token)
dct = {
'access_token' => current_profile.oauth_token,
'appsecret_proof' => secret,
'fields' => "context.fields(all_mutual_friends)"
}
url = "https://graph.facebook.com/v2.5/" + friend.uid + "/"
resp = HTTPClient.get(url, dct)
答案 0 :(得分:1)
这是我的代码:
hmac = OpenSSL::HMAC.new(FB_SECRET, OpenSSL::Digest::SHA256.new)
hmac << access_token
proof = hmac.hexdigest
param_hash[:appsecret_proof] = proof
其中FB_SECRET
是32位(在我的情况下)随机字符串。
在大多数情况下,access_token
是用户的登录身份验证令牌(我假设您为current_profile.oauth_token
)。此令牌必须与您的应用相关联。如果要使用您应用的凭据而不是用户的凭据进行API调用,则可以使用"#{FB_APP_ID}|#{FB_SECRET}"
作为访问令牌。
cf https://developers.facebook.com/docs/facebook-login/access-tokens
答案 1 :(得分:0)
我找到了另一种为 Facebook 生成appsecret_proof
的方法:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), <app_secret>, <user_access_token>)
摘录自此gist thread