6

私はOmniAuth+Deviseを使用して、ユーザーが通常のユーザーアカウントに接続されたFacebook / Twitter / Gowalla/etcを使用して登録できるようにしています。これで、ユーザーがこれらのいずれかまたは自分のアカウントを使用してログインすると、すべてのソーシャルネットワークが認証テーブルに接続されます。

ツイートやFacebookプレイスのチェックなど、これらのプロバイダーのいずれかからコンテンツをプルできる必要があります。これを行うには、別のgem、プラグインを使用する必要があることを理解していますが、必要な構成を取得しますそれらの宝石を操作する(そしてリクエストを行う)ことは私を混乱させます。

omn​​iauth.rbのプロバイダー構成アイテムにアクセスできる必要があるため、APIキーやシークレットキーなどがあります。次に、oAuthのものからトークンを取得してリクエストを行う必要があります。

https://github.com/jrallison/authlogic_oauthのような他のgemは、oauth_token、oauth_secret、oauth_tokenを保存しているようですが、OmniAuthは保存していません。

おそらくお分かりのように、私はRuby、Rails、oAuthを初めて使用するため、これは非常に難しいアプリケーションであることが判明しています。助けがとても必要です。

4

2 に答える 2

20

並びました!

http://railscasts.com/episodes/236-omniauth-part-2で説明されている認証テーブルにトークンとシークレットを追加しましたが、authentication.build 行を変更して、さらに 2 つのパラメーターを受け取ります。

authentications.build(
    :provider => omniauth['provider'], 
    :uid => omniauth['uid'], 
    :token => omniauth['credentials']['token'], 
    :secret => omniauth['credentials']['secret']
)

次に、 http://dev.twitter.com/pages/oauth_single_token#rubyのコード例を使用しました

class CronController < ApplicationController

    def recent_tweets
        # Exchange your oauth_token and oauth_token_secret for an AccessToken instance.

        def prepare_access_token(oauth_token, oauth_token_secret)
            consumer = OAuth::Consumer.new("APIKey", "APISecret"
                { :site => "http://api.twitter.com"
                })
            # now create the access token object from passed values
            token_hash = { :oauth_token => oauth_token,
                                         :oauth_token_secret => oauth_token_secret
                                     }
            access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
            return access_token
        end

        auth = current_user.authentications.find(:first, :conditions => { :provider => 'twitter' })

        # Exchange our oauth_token and oauth_token secret for the AccessToken instance.
        access_token = prepare_access_token(auth['token'], auth['secret'])

        # use the access token as an agent to get the home timeline
        response = access_token.request(:get, "http://api.twitter.com/1/statuses/home_timeline.json")

        render :json => response.body
    end
end

current_user.authentications からコンテンツを取得することで (1 つしかないはずなので、最初のものを見つけます)、トークンとセキュリティを取得できます。

これで、これを微調整して、保存したものを取得し、JSON をいじって、必要なものを取得できます。Facebookもかなり似ていると確信しています。

于 2010-11-16T23:58:41.777 に答える
6

これはあなたが探しているものですか?http://railscasts.com/episodes/236-omniauth-part-2 :) メールなどのデータを取得する方法を示しています。それがあなたが探しているものかどうかはわかりません。

于 2010-11-16T15:11:02.883 に答える