Rails 3 + fb_graph如何获取访问令牌以发布到我自己的FB页面

时间:2012-10-15 12:38:22

标签: ruby-on-rails ruby-on-rails-3 facebook-graph-api fb-graph

我正在使用Rails 3 + fb_graph发布到我自己的Facebook页面。我有适用的代码,但它使用的访问令牌只能工作几个小时。每天刷新这个访问令牌非常烦人。所以我注册了一个FB应用程序。我现在有:

  my_app = FbGraph::Application.new("App ID");
  acc_tok = my_app.get_access_token("App Secret");
  me = FbGraph::User.me(acc_tok)
  me.fetch
  me.accounts
  account = me.accounts.select {|account| account if account.name == "BoaJobs.com"}.first

  page = FbGraph::Page.new(account.identifier)

  note = page.note!(:access_token => account.access_token, :subject => @title, :message => @message, :link => @url)

但我在me.fetch行上收到错误:

  OAuthException :: An active access token must be used to query information about the current user.

有人可以发布一些帮我解决这个问题的代码。非常感谢你提前。

1 个答案:

答案 0 :(得分:6)

生病,请您参考https://github.com/nov/fb_graph/wiki/Page-Management

其中nov声明:您需要页面的访问令牌来管理您的页面。 您的(用户)访问令牌在这里不起作用。

按照指向facebook开发者网站的链接获取更多信息

你需要用户access_token,我这样做是通过omniauth-facbook https://github.com/mkdynamic/omniauth-facebook

通过首先将此初始值设定项输入到您的应用中来检索用途

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
           :scope => 'email,user_birthday,read_stream', :display => 'popup'
end

(请注意,您可以在此处更改范围的权限,检查Facebook开发人员的登录权限以获取更多信息

omniauth和omniauth-facebook有一些内部工作方式,但是jist是 当你从facebook获得回调时,你有一个来自请求的机架omniauth哈希

omniauth = request.env["omniauth.auth"]

从中可以访问像这样的用户访问令牌

facebook_user_token = omniauth['credentials']['token']
然后,您可以将该令牌提供给您的fb_graph页面调用

page = FbGraph::Page.new('FbGraph').fetch(
  :access_token => facebook_user_token,
  :fields => :access_token
)

然后,您只需通过调用所需方法即可创建注释,而无需引用访问令牌

note = page.note!(:subject => @title, :message => @message, :link => @url)