7

Omniauth を新しい Facebook アプリケーションに統合する作業を行っています。かなりまばらなドキュメントを調べて、グラフ API にアクセスする簡単な方法が提供されているかどうかを調べています...かなり単純な Koala から移行しています。

これに Omniauth を使用した人はいますか? ユーザーのアルバムから写真を取得し、それらの一意の URL を並べ替えて取得したいと考えています。

4

6 に答える 6

14

私は最終的に知りました:

1)この宝石を含める

2) 宝石を使用します。

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

user.fetch

3) あなたの情報を取得する user.name

ここから何でも取得できることを覚えておいてください ttp://developers.facebook.com/docs/reference/api/user

于 2010-10-25T17:09:23.180 に答える
4

別の良いオプションは Koala です: https://github.com/arsduo/koala

Facebook だけを使用している場合、Koala には独自の OAuth サポートがあります。OmniAuth でも問題なく動作します。これらを一緒に使用するには、Railscast ごとに OmniAuth をセットアップします: http://railscasts.com/episodes/235-omniauth-part-1

次に、「トークン」列を「認証」テーブルに追加し、トークンを取得するためのサポート メソッドを追加します。アプリが Facebook と対話する必要がある場合は、Koala にトークンを取得させ、その処理を実行させます。コントローラーで:

if @token = current_user.facebook_token
  @graph = Koala::Facebook::GraphAPI.new(@token)
  @friends = @graph.get_connections("me", "friends")
end
于 2010-11-22T20:39:26.237 に答える
3

まず、fb_graph を選択して比較します。

コアラと:

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!")

fb_graphを使用:

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

omn​​iauthを使用する場合、すべてのユーザーは多くの権限 (facebook、twitter など) を持っています。

ユーザー認証ごとに、oauth コールバック ハッシュで返されるoauthトークンを保存する必要があります。

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

次に、アルバムや写真にアクセスしたい場合は、次のようにします。

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
于 2011-03-02T13:12:22.773 に答える
2

そのため、fb_graph を適切に動作させることができませんでした。合計で約 8 ~ 10 週間、Ruby On Rails の開発者として働いてきた私はまだ新参者です。他の人々。

しかし、単純な Facebook クライアントの概要を説明し、すべてがどのように接続されているかを明確に示している、この素晴らしい小さなブログ投稿を見つけました。Facebook が http200 ではなく http302 を返すため、me/picture オブジェクトを取得するという問題が見つかりましたが、作成者の助けを借りて簡単に回避できました。確認してください: http://bnerd.de/misc/ruby-write-basic-client-for-facebook-graph-api/

私は今、このウォークスルーに基づいてログイン/サインアップのやり取りを簡素化するために Omniauth を使用しています: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth と、そこから取得したトークンを使用して、この単純な上記の bnerd リファレンスの FBClient を使用して、グラフ API にアクセスします。私が見つけたものが他の人に役立つことを願っています。

...これが私のバージョンのbnerdのコードで、うまくいきました:

    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

私はこれを改善できるよりも経験豊富な人だと確信しています.Rubyを学び始めて約10週間でした.

于 2010-10-26T01:58:06.397 に答える
0

oauthとoauth2がアンインストールされていることを確認してから、oauth2をインストールしました。現在、omniauthとfb_graphが機能しているようですが、おそらくもっとテストする必要があります。

于 2011-07-26T18:11:55.060 に答える
0

また、devise+Omniauth ソリューションを機能させるのにも問題がありました。私は問題を抱えていました:

  1. セッション Cookie は、fb_graph と koala を初期化するために必要な facebook 認証トークンを保存しませんでした。
  2. Facebook認証トークンを取得した後、fb_graphを初期化できませんでした(ただし、いくつかの作業の後、Koalaが機能するようになりました)。

authentications_controller.rb の create メソッドに 'session[:omniauth] = omniauth' を挿入することで #1 を解決しました。

Koalaを使用して#2を解決しました。fb_graph には oauth2 が必要で、デバイスの omniauth 統合では oauth が使用されているようです。Koala は、セッション [:omniauth]["credentials"]["token"] によって保存された facebook 認証トークンと完全に連携します。

次のように koala を初期化します:
- @fbprofile = Koala::Facebook::GraphAPI.new( session[:omniauth]["credentials"]["token"] )

于 2011-04-23T15:31:20.550 に答える