Rails Twitter Gem Omniauth - PullRequest
       5

Rails Twitter Gem Omniauth

1 голос
/ 12 ноября 2011

У меня проблемы с использованием омниаута и твиттера для создания твитов.

Я использовал этот учебник http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

и я могу войти в систему с помощью твиттера, генерировать аутентификации, но не могу обновить твиты.

current_user.twitter.update("My Rails 3 App with Omniauth, Devise and Twitter")

Эта строка жалуется на обновление метода.

Что меня смущает в приведенном выше учебнике, так это то, что в начале они генерируют миграцию для хранения секрета в аутентификациях, но нигде в руководстве не упоминается об изменении кода для записи секрета в базу данных

Мое понимание состоит в том, что секрет получается из хеша omniauth, который хранится в файле cookie сеанса. Что мне здесь не хватает?

def hash_from_omniauth(omniauth)
  {
      :provider => omniauth['provider'],
      :uid => omniauth['uid'],
      :token => (omniauth['credentials']['token'] rescue nil),
      :secret => (omniauth['credentials']['secret'] rescue nil)
  }
end

Таким образом, кажется, что все работает, кроме создания клиента Twitter, следовательно, не имеет доступного метода обновления?

current_user.twitter.update("first tweet")

Методом Twitter следует создать клиент Twitter

  def twitter
debugger
unless @twitter_user
  provider = self.authentications.find_by_provider('twitter')
  @twitter_user = Twitter::Client.new(:oauth_token => provider.token, :oauth_token_secret => provider.secret )rescue nil
end
@twitter_user

конец

Извините, я не очень хорош в объяснении проблемы. Любая помощь с благодарностью. Спасибо L

1 Ответ

2 голосов
/ 12 ноября 2011

Если вам нужно только публиковать сообщения в твиттере, возможно, будет проще полностью отказаться от жемчужины твиттера.Генерация токенов потребителя / доступа требует идентификатора приложения и секрета, а также доступа пользователя и секретных токенов.Я обнаружил, что это достаточно легко реализовать, и я подумал, что накладные расходы на драгоценный камень в Твиттере не нужны.

module User::Social

  def self.included(base)
    base.instance_eval do
      include Rails.application.routes.url_helpers
    end
  end


  def promote_activity(type, profile)
    url = short_profile_url(profile, :host => Conf.domain)
    tw_client.request(:post, "http://api.twitter.com/1/statuses/update.json", :status => I18n.translate("tweets.#{type}", :profile => profile.to_s, :url => url))
  end

  def tw_client
    @tw_client ||= begin
      consumer = OAuth::Consumer.new(Conf.tw_app_id, Conf.tw_secret, :site => 'http://api.twitter.com')
      OAuth::AccessToken.from_hash(consumer, {:oauth_token => self.access_token, :oauth_token_secret => self.secret_token})
    end
  end
end


class User < AR::Base
  include User::Social
end
...