Facebook graph api 从设备+访问令牌;omniauth facebook身份验证用于fb graph

Facebook graph api 从设备+访问令牌;omniauth facebook身份验证用于fb graph,facebook-graph-api,ruby-on-rails-3.1,devise,omniauth,fb-graph,Facebook Graph Api,Ruby On Rails 3.1,Devise,Omniauth,Fb Graph,基于本教程,我在Rails 3应用程序中使用Desive和omniauth facebook进行facebook身份验证,效果非常好 但现在我想在我的应用程序中完全集成Facebook,通过它我可以访问用户的照片、朋友等,为此我考虑使用fb_graph。FBU图需要一个令牌,我想知道如何编辑我的用户模型来保存令牌并在FBU图中使用它。我们将非常感谢您对此事的任何帮助 这就是我的用户模型现在的样子: class User < ActiveRecord::Base # Include def

基于本教程,我在Rails 3应用程序中使用Desive和omniauth facebook进行facebook身份验证,效果非常好

但现在我想在我的应用程序中完全集成Facebook,通过它我可以访问用户的照片、朋友等,为此我考虑使用fb_graph。FBU图需要一个令牌,我想知道如何编辑我的用户模型来保存令牌并在FBU图中使用它。我们将非常感谢您对此事的任何帮助

这就是我的用户模型现在的样子:

class User < ActiveRecord::Base

# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable

# Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :photos
  has_many :scrapbooks

  def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
    data = access_token.extra.raw_info
    if user = User.where(:email => data.email).first
      user
    else # Create a user with a stub password.
      User.create!(:email => data.email, :password => Devise.friendly_token[0,20])
    end  
  end

  def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"]
      end
    end
  end
end
class用户data.email)
用户
否则#创建具有存根密码的用户。
User.create!(:email=>data.email,:password=>design.friendly_令牌[0,20])
结束
结束
定义self.new_与_会话(参数,会话)
super.tap do| user|
如果数据=会话[“designe.facebook_数据”]&会话[“designe.facebook_数据”][“额外”][“原始信息”]
user.email=数据[“电子邮件”]
结束
结束
结束
结束
您可以执行以下操作:

User.create!(:email => data.email, :password => Devise.friendly_token[0,20], :authentication_token => access_token.credentials.token)

您还需要将:authentication\u token或您命名的任何东西添加到attr\u accessible中

我正在寻找相同的东西。我试图实现{s回答并感觉到了相同的错误:
OAuthException::必须使用活动访问令牌来查询有关当前用户的信息
。然后我意识到身份验证\u令牌不是以这种方式保存的。在查找了一段时间后,我发现了一种使用会话变量的方法,即在omniauth回调期间实现令牌保存然后在调用fb_graph时使用它。所以它可能是这样的:

omniauth回调(app/controllers/users/omniauth\u callbacks\u controller.rb)

我不知道这是不是最好的办法,但到目前为止还有效。

我会把你推荐给

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

更多信息,请点击他的facebook开发者网站链接

您将需要用户访问\u令牌,我通过omniauth facbook执行此操作

通过首先将此初始值设定项输入到应用程序中来检索使用

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的回调时,你会收到来自请求的rack omniauth哈希

omniauth = request.env["omniauth.auth"]
从中,您可以像这样访问用户访问令牌

facebook_user_token = omniauth['credentials']['token']
然后,您可以将该令牌馈送到您的fb_图形页面调用中

page = FbGraph::Page.new('FbGraph').fetch(
  :access_token => facebook_user_token,
  :fields => :access_token
)
然后,您就可以通过调用所需的方法来创建一个便笺,而无需引用访问令牌

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

让我们创建
Facebook
模型并存储在该表中,但我不确定这是最好的方法。:p我现在面临的唯一问题是令牌过期。出于测试目的,我从我的Facebook取消了应用程序的授权,现在当我尝试重新授权自己时,我得到以下错误:
OAuthException::活动访问令牌必须e用于查询当前用户的信息
是否有任何方法可以在用户每次登录我的应用程序时刷新令牌,以避免令牌过期?也许可以在用户模型中创建一个方法,在取消授权期间调用self.authentication_token=nil;self.save;。还不确定如何处理此问题。几天后,我可能会will.如果您有多个身份验证提供商(如facebook和twitter),是否有人知道如何刷新访问令牌?示例:用户总是使用twitter登录,但他/她也有一个已连接的facebook帐户。60天后,facebook代币过期。那么我如何能同时刷新所有access_代币?谢谢你的回答。我还有一个问题-上面的问题如何处理刷新代币?@BKSpurgeon不知道,这是一个补丁解决方案。很抱歉回复太晚。
page = FbGraph::Page.new('FbGraph').fetch(
  :access_token => facebook_user_token,
  :fields => :access_token
)
note = page.note!(:subject => @title, :message => @message, :link => @url)