Я использовал это руководство при настройке приложения для подключения к твиттеру:
http://philsturgeon.co.uk/news/2010/11/using-omniauth-to-make-twitteroauth-api-requests
Помог мне тонну, надеюсь, что это сделает для тебя то же самое.
Оригинальный пост
Опубликовано: 16 ноября 2010 г.
Используя блестящий системный гем пользователя Разработайте и гем под названием OmniAuth , вы можете создать приложение Rails, которое будет входить в систему или регистрировать пользователей через Twitter, Facebook, Gowalla и т. Д. , Но как только пользователь вошел в систему, как вы на самом деле взаимодействуете с API от имени только что авторизованной учетной записи?
Эта статья начинается там, где заканчивается RailsCasts, поэтому, если вы еще не работали с Devise и OmniAuth, вы можете посмотреть:
Итак, предполагая, что мы все подошли к концу третьего видео, мы все готовы к работе. Я буду использовать пример Twitter, но на самом деле любой из провайдеров, использующих oAuth, будет использовать тот же подход. Как и в «старые времена», когда мы использовали имя пользователя и пароль Twitter для аутентификации запроса API, теперь мы используем токен доступа и секрет токена. Вы можете думать, что это в основном то же самое, что и для аутентификации запросов API, для нас это так.
Чтобы получить токен и секрет, вам нужно добавить несколько полей в таблицу аутентификаций:
rails g migration AddTokenToAuthentications token:string secret:string
rake db:migrate
Теперь база данных готова к сохранению учетных данных, мы можем изменить код аутентификации для заполнения полей. Предполагая, что вы поместили метод в user.rb, как предложил RailsCast # 236, затем откройте user.rb и измените следующую строку:
authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
и замените его на:
authentications.build(
:provider => omniauth['provider'],
:uid => omniauth['uid'],
:token => omniauth['credentials']['token'],
:secret => omniauth['credentials']['secret']
)
Теперь, когда кто-нибудь аутентифицирует свою учетную запись, мы можем сохранить его учетные данные, которые возвращаются из внутренней скрытой магии, которая является OmniAuth.
Следующим шагом является выполнение некоторых запросов с использованием этих сохраненных учетных данных, что почти идеально описано в Документации для разработчиков Twitter . Вы захотите установить гем oauth (поместите его в свой Gemfile и запустите установку комплекта), затем вы можете использовать следующий код для тест-дампа списка твитов от пользователя:
class TwitterController < 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/user_timeline.json")
render :json => response.body
end
end
Извлекая содержимое из current_user.authentications (я нахожу первое, поскольку в моем приложении они должны иметь только один), я могу получить учетные данные и иметь полные разрешения, чтобы получать их последние твиты, публиковать новые, видеть твиты друзей и т. Д. .
Теперь я могу настроить это, сохранить вещи, использовать JSON и взять то, что мне нужно. Работа с Facebook или любым другим провайдером oAuth будет работать практически идентично, или вы можете установить специальные гемы для взаимодействия с их API, если прямой подход не такой гладкий, как вам бы хотелось.
конец исходного сообщения