Frage

Ich arbeite Omniauth mit meiner neuen Facebook-Anwendung auf der Integration, und ich bin auf der Suche durch die eher spärliche Dokumentation zu verstehen, wenn es einfache Möglichkeiten gibt die Grafik-API für den Zugriff auf ... ich von Koala bewegte das ist ziemlich einfach war.

Hat jemand da draußen Omniauth für diese noch verwendet? Ich mag Fotos von der Benutzer-Alben erhalten, und zu sortieren und erhalten die eindeutige URLs für sie.

War es hilfreich?

Lösung 4

war also ich fb_graph zur Arbeit nicht in der Lage richtig zu bekommen - ich bin immer noch ein noob ein Ruby on Rails Entwickler für insgesamt ca. 8-10 Wochen gewesen, und deshalb keinen Instinkt für sie haben, was sein muss, offensichtliche Probleme auf andere Leute.

Allerdings fand ich diese große kleine Blog-Post, die ein einfaches Facebook-Client und zeigt skizziert deutlich, wie es alle Stecker zusammen. Ich fand ein Problem mit dem mir / Bildobjekt Aufnehmen als Facebook gibt einen http302 nicht http200 aber das war leicht mit Hilfe des Autors, um gearbeitet. Check it out: http://bnerd.de/ misc / Rubin-write-basic-Client-for-facebook-graph-api /

Ich bin jetzt Omniauth für die Einfachheit der Anmeldung / Registrierung Interaktion basiert auf dieser exemplarischen Vorgehensweise unter Verwendung von hier: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth und mit den Token ich davon, dass ich bin mit diesem einfachen FBClient vom bnerd Referenz über Zugriff auf dem Graph-API. Hoffnung, was ich gefunden hilft anderen.

... hier ist meine Version von bnerd den Code und es funktionierte für mich:

    class FBClient

      def initialize(app, access_token = nil)
        @app = app
        @access_token = access_token
      end

      # request permission(s) from user
      def request(perms)
        #create a random verifier to identify user on fb callback
        verifier = (0...10).map{65.+(rand(25)).chr}.join
        uri = "https://graph.facebook.com/oauth/authorize?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&scope=#{perms}"

        request = { :verifier => verifier, :uri => uri }
        return request

      end

      def connect(code, verifier)

        uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&client_secret=#{@app.secret}&code=#{CGI::escape(code)}")
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true

        request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
        response = http.request(request)     
        data = response.body

        return data.split("=")[1]
      end

      # get, post
      def get(path, params = nil)
        uri = URI.parse("https://graph.facebook.com/" + path)
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true

        if params.nil?
          params = Hash.new
        end

        if params["access_token"].nil? 
          params["access_token"] = @access_token unless @access_token.nil?
        end

        request = Net::HTTP::Get.new(uri.path) 
        request.set_form_data( params )
        request = Net::HTTP::Get.new(uri.path + "?" + request.body)

        return response = http.request(request)
      end

      def post(path, params = nil)
        uri = URI.parse("https://graph.facebook.com/" + path)
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true        

        if params.nil?
          params = Hash.new
        end

        if params[:access_token].nil?
          params[:access_token] = @access_token unless @access_token.nil?
        end

        request = Net::HTTP::Post.new(uri.path) 
        request.set_form_data( params )
        request = Net::HTTP::Post.new(uri.path + "?" + request.body)

        response = http.request(request)
        response.code == "200" ? feed = JSON.parse(response.body) : raise("Sorry, an error occured. #{response.body}")
        return feed
      end
    end

Ich bin sicher, dass jemand mehr Erfahrung als ich das verbessern könnte - ich ca. 10 Wochen war in dem Lernen Ruby-

(und meine erste Programmierung seit Fortran und Pascal an der Universität in den frühen 90er Jahren!).

Andere Tipps

Ich fand schließlich heraus:

1) schließt dieses Juwel

2) das Juwel:

user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"])

user.fetch

3) abrufen Ihre Informationen user.name

Denken Sie daran, Sie können alles von hier ttp: //developers.facebook.com/docs/reference/api/user

Eine weitere gute Möglichkeit ist, Koala: https://github.com/arsduo/koala

Wenn Sie nur über Facebook, hat Koala seine eigene OAuth-Unterstützung. Es funktioniert auch gut mit OmniAuth. Um sie zu verwenden zusammen, richten Sie OmniAuth pro dieses Railscast: http://railscasts.com/episodes/235-omniauth-part-1

Dann fügen Sie eine ‚token‘ Spalte 'Authentifizierungen Tisch und alle unterstützenden Methoden zur Token abruft. Wenn die App Bedürfnisse mit Facebook kommunizieren, lassen Koala das Token packen und seine Sache zu tun. In einem Controller:

if @token = current_user.facebook_token
  @graph = Koala::Facebook::GraphAPI.new(@token)
  @friends = @graph.get_connections("me", "friends")
end

Als erstes würde ich für fb_graph gehen, nur vergleichen:

mit Koala :

graph = Koala::Facebook::GraphAPI.new OAUTH_ACCESS_TOKEN
friends = graph.get_connections("me", "friends")
graph.put_object("me", "feed", :message => "I am writing on my wall!")

mit fb_graph :

me = FbGraph::User.me OAUTH_ACCESS_TOKEN
my_friends = me.friends
me.feed! :message => "I am writing on my wall!"

Bei der Verwendung von omniauth , jeder Benutzer viele Berechtigungen hat (Facebook, Twitter, ...)

Für jede Benutzerautorisierung, sollten Sie die oauth speichern Token , die in Ihrem oauth Rückruf Hash zurückgegeben wird.

auth = Authorization.create!(:user => user,
                             :uid =>      hash['uid'],
                             :provider => hash['provider'],
                             :token =>    hash['credentials']['token'])

Dann, wo immer Sie Zugang Alben wollen und Fotos, so etwas wie folgt aus:

class User
  ...
  has_many :authorizations
  ...
  def grap_facebook_albums
    facebook = authorizations.where(:provider => :facebook).first
    fb_user = ::FbGraph::User.fetch facebook.uid, :access_token => facebook.token
    fb_albums = fb_user.albums
  end
  ...
end

ich auch Probleme hatte immer die devise + Omniauth Lösung zu arbeiten. Ich hatte Probleme:

  1. Die Session-Cookie nicht speichern die Facebook-Authentifizierungs-Token, die notwendig ist fb_graph und Koala zu initialisieren.
  2. Ich konnte nicht fb_graph initialisieren, nachdem das immer facebook Authentifizierungs-Token statt (aber bekam Koala zur Arbeit nach einiger Arbeit).

I gelöst # 1 durch Einfügen 'session [: omniauth] = omniauth' in die create-Methode der authentications_controller.rb

.

I gelöst # 2 von Koala verwenden. Scheinen, wie fb_graph erfordert oauth2 und die devise omniauth Integration Verwendung oauth. Koala arbeitet mit perfekt mit den Facebook-Authentifizierungstoken durch Sitzung gespeichert [: omniauth] [ "Credentials"] [ "Token"].

Sie initialisieren Koala wie folgt aus:
 - @fbprofile =    Koala :: Facebook :: GraphAPI.new (    session [: omniauth] [ "Credentials"] [ "Token"]    )

Ich stellte sicher, oauth und oauth2 deinstalliert wurden, und dann habe ich installiert oauth2. Es scheint, dass jetzt omniauth und fb_graph arbeiten ... aber wahrscheinlich brauchen, es zu testen mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top