Ruby on rails 3 如何获得';数据';与Facebook请求一起发送的信息

Ruby on rails 3 如何获得';数据';与Facebook请求一起发送的信息,ruby-on-rails-3,facebook,Ruby On Rails 3,Facebook,我的用户使用请求对话框邀请朋友访问我的应用程序 我发送额外数据如下: FB.ui({ method: 'apprequests', message: "Come to this great site, data: '{"page_id": "<%=@page.id%>"}' },... 如何从控制器内部使用Rails和Ruby来实现这一点 我使用的是OmniAuth BTW,我强烈建议您不要尝试在Javasc

我的用户使用请求对话框邀请朋友访问我的应用程序

我发送额外数据如下:

FB.ui({
           method: 'apprequests',
           message: "Come to this great site,
           data: '{"page_id": "<%=@page.id%>"}'
    },...
如何从控制器内部使用Rails和Ruby来实现这一点


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


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

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

我是一个超级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["data"] # to get the data sent along.
再吃一点盐。这是可行的,但可能不是最好的解决方案

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