Как мне написать на чьей-то стене в Facebook или Twitter с помощью Omniauth? - PullRequest
0 голосов
/ 07 февраля 2011

Я знаю, что Omniauth предназначен только для аутентификации, и на самом деле в него не включены инструменты FB или Twitter.

Однако предположим, что мое приложение Rails 3 использует Omniauth, и у меня теперь есть несколько зарегистрированных пользователей в моей системе.

Как я могу опубликовать их на стене?Или мне нужен какой-то другой тип системы авторизации?

Спасибо за любые указатели.

Ответы [ 2 ]

4 голосов
/ 30 марта 2011

Я нашел эту ссылку, которая позволила мне публиковать сообщения как в Facebook, так и в Twitter. Очень хороший урок:

http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

1 голос
/ 08 февраля 2011

Я использовал это руководство при настройке приложения для подключения к твиттеру:

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, если прямой подход не такой гладкий, как вам бы хотелось.

конец исходного сообщения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...