Rails Twitter Gem Omniauth

#ruby-on-rails #ruby #twitter #omniauth

#ruby-on-rails #ruby #Twitter #omniauth

Вопрос:

У меня возникли проблемы с использованием omniauth и Twitter gem для генерации твитов.

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

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

 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
  

завершение

Извините, я не силен в объяснении проблемы. Любая помощь приветствуется. Спасибо, Я

Комментарии:

1. Используете ли вы Twitter gem для чего-нибудь еще?

Ответ №1:

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

 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
  

Комментарии:

1. это здорово, но мне интересно, можете ли вы немного прояснить для новичка. 1) Я предполагаю, что мне нужно установить Omniauth gem? 2) Является ли «Conf» сокращением от config? Это то, что я создаю? итак, я должен поместить consumer_key и consumer_secret в конфигурационный файл? какой из них?

2. Прошу прощения за отсутствие ответа — в последнее время я много путешествовал. Conf — это мой класс Settingslogic, который я бы рекомендовал проверить, если вы с ним не знакомы. Вам нужен только Oauth, но поскольку Oauth зависит от Omniauth, вы должны быть настроены.