then the tab open new example below facebook-graph-api ruby-on-rails-3.1 devise omniauth fb-graph

facebook-graph-api - the - facebook oauth response example



El token de acceso de la autenticación idee+omniauth-facebook para usar en fb-graph (3)

Utilicé ide y omniauth-facebook en mi aplicación Rails 3 para la autenticación de Facebook, basada en este tutorial: Agregar la autenticación de Facebook a la aplicación Rails 3.1 , ¡y funciona muy bien!

Pero ahora quiero tener una integración completa de Facebook en mi aplicación, con la que puedo acceder a las fotos, amigos, etc. del usuario, y para eso estoy pensando en usar fb_graph. fb_graph requiere un token, y quería saber cómo editar mi modelo de usuario para guardar el token y usarlo en fb_graph. Cualquier ayuda con respecto a este asunto será muy apreciada.

Así es como se ve mi modelo de usuario en este momento:

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


Estaba buscando lo mismo. Traté de implementar la respuesta de James Robey y sentí el mismo error: OAuthException :: An active access token must be used to query information about the current user . Entonces me di cuenta de que authentication_token no se guardaba de esta manera. Después de mirar un rato encontré en la aplicación FbGraph + OmniAuth + Facebook Graph API on Rails una forma de hacerlo con las variables de la sesión, implementando el guardado del token durante la devolución de llamada de omniauth y usándolo luego al llamar a fb_graph. Entonces podría ser algo como esto:

omniauth callback (aplicación / controladores / usuarios / omniauth_callbacks_controller.rb)

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) if @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" # this part is where token is stored auth = request.env[''omniauth.auth''] token = auth[''credentials''][''token''] session[:fb_access_token] = token # sign_in_and_redirect @user, :event => :authentication else session["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url end end end

Luego, cuando llame a fb_graph

@fb_user = FbGraph::User.new(''me'', access_token: session[:fb_access_token]).fetch

No sé si es la mejor manera, pero funciona hasta ahora.


Puedes hacerlo:

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

También necesitarás agregar: authentication_token o lo que sea que hayas nombrado al attr_accessible


lo referiré a https://github.com/nov/fb_graph/wiki/Page-Management

donde nov dice: necesitas el token de acceso de la página para administrar tu página. Su token de acceso (de un usuario) no funciona aquí.

siga su enlace al sitio de desarrolladores de Facebook para obtener más información

necesitarás los usuarios access_token y lo hago a través de omniauth-facbook https://github.com/mkdynamic/omniauth-facebook

que recuperas el uso ingresando primero este inicializador en tu aplicación

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

(tenga en cuenta que puede cambiar los permisos en el alcance aquí, consulte los permisos de inicio de sesión de los desarrolladores de Facebook para obtener más información).

hay algunos funcionamientos internos para omniauth y omniauth-facebook, pero el momento es cuando recibes la devolución de llamada de Facebook tienes un hash omniauth de rack de la solicitud

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

de eso se puede acceder al token de acceso de los usuarios como este

facebook_user_token = omniauth[''credentials''][''token'']

luego puede alimentar ese token en su llamada a la página fb_graph

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

entonces simplemente podrá crear una nota llamando al método que desee sin una referencia al token de acceso

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