如何获取随Facebook请求一起发送的“数据”信息

时间:2011-08-29 04:04:40

标签: ruby-on-rails-3 facebook

我的用户使用请求对话邀请朋友加入我的应用程序。

我按如下方式发送额外数据:

FB.ui({
           method: 'apprequests',
           message: "Come to this great site,
           data: '{"page_id": "<%=@page.id%>"}'
    },...

当邀请人接受请求时,他们将被带到我的网站 我想阅读我在“数据”中发送的信息。

我理解我需要获取请求object_ids 我有那些。

我只是不知道如何获取Rails和Javascript中对象内部的信息。

我使用php看到了这个例子:

$request_content = json_decode(file_get_contents("https://graph.facebook.com/$request_id?$app_token"), TRUE);
extract(json_decode($request_content['data'], TRUE));

如何使用我的控制器内部的Rails,Ruby来实现这一目标?

我正在使用OmniAuth BTW

3 个答案:

答案 0 :(得分:0)

我强烈建议您不要尝试在Javascript中实现它,因为它允许用户在浏览器中找到您的App访问令牌,这对您的应用来说是一个巨大的安全问题。

服务器端,您可以使用任何基本语言(并且可以通过对用户浏览器支持的Javascript调用来触发),PHP示例应该适用于能够解码JSON的任何语言。

答案 1 :(得分:0)

在rails中你需要像Koala,facebooker等使用facebook api包装器,你可以轻松添加它。 Omniauth仅提供身份验证,仅此而已。 您可以从omniauth facebook身份验证中保存令牌,并使用它来向用户请求有关考拉的额外信息。

答案 2 :(得分:0)

我是一个大型NOOB,但这对我有用,所以我想我会分享它:

The user clicks 'allow' in facebook:



1. User sent to authorize action in a controller to store the request ids
2. They are sent to a page that has a javascript redirect to the sessions controller action

在会话控制器中:

require "net/https"
require "net/http"
require "uri"


request_id = session[:request_ids].last 
auth = request.env["omniauth.auth"]
access_token = "access_token=#{auth['credentials']['token']}"
request_url = URI.parse("https://graph.facebook.com/#{request_id}?#{URI.escape(access_token)}")
http = Net::HTTP.new(request_url.host, request_url.port)
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_PEER
      request_body = http.request(Net::HTTP::Get.new(request_url.request_uri))
request_content = ActiveSupport::JSON.decode(request_body.body)

request_content将包含与原始应用程序请求一起发送的所有信息。

因此,您可以像访问任何哈希一样访问对象。

request_content["data"] # to get the data sent along.

再次拿出一粒盐。它有效但可能不是最好的解决方案。