Твиттер с использованием Twitter gem и Omniauth

Я разрабатываю веб-приложение, которое позволит пользователям твитить сообщения и ссылки, но я не могу заставить Twitter и Omniauth хорошо работать вместе. В настоящее время я работаю на Rails 3.0.6 и Ruby 1.8.7, с драгоценным камнем Twitter 1.4.1 и драгоценным камнем Omniauth 0.2.5.

Я могу нормально аутентифицировать пользователей, но когда дело доходит до отправки твита, мне просто выдается ошибка:

 POST https://api.twitter.com/1/statuses/update.json: 401: Incorrect signature

Я следил за этим руководством, и поместил мой потребительский ключ и потребительский секрет в блок настройки Twitter в моем инициализаторе Omniauth, но не токен oauth или секрет oauth, потому что они, безусловно, будут использоваться для каждого пользователя.

omniauth.rb

 Twitter.configure do |config|
   config.consumer_key = "XXXXXXXXXXXXXXXXXXXXXX"
   config.consumer_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
 end

user.rb

  def twitter
     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
  end

Затем я формирую запрос, используя:

 current_user.twitter.update("Hello World!")

И вот что тогда дает мне ошибку 401.

Любые идеи? Спасибо!


person wastedhours    schedule 04.05.2011    source источник


Ответы (2)


Ваш код user.rb использует неправильный формат. Они очень сильно изменились. Вам нужно что-то вроде этого сейчас:

require 'twitter'
class TwitterToken < ConsumerToken
  TWITTER_SETTINGS={:site=>"http://api.twitter.com", :request_endpoint => 'http://api.twitter.com',}
  def self.consumer
    @consumer||=OAuth::Consumer.new credentials[:key],credentials[:secret],TWITTER_SETTINGS
  end

  def client
    Twitter.configure do |config|
      config.consumer_key = TwitterToken.consumer.key
      config.consumer_secret = TwitterToken.consumer.secret
      config.oauth_token = token
      config.oauth_token_secret = secret
    end
    @client ||= Twitter::Client.new
  end
end
person Bob Sumo    schedule 05.05.2011

У меня были похожие проблемы с этой версией OmniAuth, я вернулся к версии 0.2.0, и все ошибки 401 прекратились.

person Mike Hagedorn    schedule 15.08.2011