我正在使用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.
有人可以发布一些帮我解决这个问题的代码。非常感谢你提前。
答案 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)