OmniAuth + подтягивание твитов, мест FB и т. Д. - PullRequest
6 голосов
/ 15 ноября 2010

Я использую OmniAuth + Devise, чтобы позволить пользователям регистрироваться, используя Facebook / Twitter / Gowalla / и т. Д., Присоединенные к обычным учетным записям пользователей.Теперь, когда пользователь входит в систему с использованием любого из них или своей учетной записи, все его социальные сети присоединяются к таблице аутентификации.

Мне нужно иметь возможность получать контент от любого из этих провайдеров, например их твитов.или их проверки в Facebook Places и т. д. Я понимаю, что мне нужно будет использовать другой гем, плагин, что угодно, чтобы сделать это, но получение конфигурации, которая мне нужна для работы с этими самоцветами (и создания запросов), сбивает меня с толку.

Мне нужно иметь возможность доступа к элементам конфигурации провайдера в omniauth.rb, поэтому у меня есть API-ключи и секретные ключи и т. Д., Затем мне нужно иметь возможность получать токены из oAuth-компонента для выполнения запросов.

Другие драгоценные камни, такие как https://github.com/jrallison/authlogic_oauth, похоже, хранят oauth_token, oauth_secret и oauth_token, но OmniAuth - нет.

Как вы, вероятно, можете сказать, я очень новичок в Ruby, Rails и oAuth, так что этооказалось очень сложным приложением.Помощь очень нужна.

Ответы [ 2 ]

20 голосов
/ 17 ноября 2010

Сортировка!

Добавил токен и секрет в таблицу аутентификаций, описанную в http://railscasts.com/episodes/236-omniauth-part-2, но изменил строку authentication.build, чтобы получить еще два параметра:

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 (я нахожу первое, поскольку у них должен быть только один), я могу получить токен и безопасность и все это хорошо.

Теперь я могу настроить это, сохранить вещи, использовать JSON и взять то, что мне нужно. Я уверен, что Facebook будет очень похож.

6 голосов
/ 16 ноября 2010

Это то, что вы ищете? http://railscasts.com/episodes/236-omniauth-part-2 :) Он показывает, как получить данные, такие как электронная почта. Не уверен, что это то, что вы ищете.

...