1

我正在使用 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.

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

4

1 回答 1

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 开发人员登录权限以获取更多信息

omn​​iauth 和 omniauth-facebook 有一些内部工作原理,但要点是当您从 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)
于 2013-02-03T03:56:09.343 回答