使用 Twitter gem 和 Omniauth 发推文

发布于 2024-11-05 01:32:05 字数 1204 浏览 4 评论 0原文

我正在开发一个网络应用程序,可以让用户发布推文和链接,但我似乎无法让 Twitter 和 Omniauth 很好地协同工作。我目前正在 Rails 3.0.6 和 Ruby 1.8.7 上运行,使用 Twitter gem 1.4.1 和 Omniauth gem 0.2.5

我可以很好地验证用户身份,但是当涉及到发送推文时,我只是给出错误:

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

我遵循了 本教程,并有将我的消费者密钥和消费者秘密放在 Omniauth 初始化程序中的 Twitter 配置块中,但不是 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 错误的原因。

有什么想法吗?谢谢!

I'm developing a web app that will let users tweet posts and links, but I can't seem to get Twitter and Omniauth to play nicely together. I'm currently running on Rails 3.0.6 and Ruby 1.8.7, with the Twitter gem 1.4.1 and Omniauth gem 0.2.5

I can authenticate the users fine, but when it comes to sending a tweet, I'm just given the error:

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

I followed this tutorial, and have placed my consumer key and consumer secret in a Twitter configure block in my Omniauth initializer, but not the oauth token or oauth secret because these will surely be used on a per-user basis.

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

I then form the request using:

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

And that's what then gives me the 401 error.

Any ideas? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末が日狂欢 2024-11-12 01:32:05

您的 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

Your user.rb code is using the wrong format. They've changed quite a lot. You need something like this now:

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
尘世孤行 2024-11-12 01:32:05

我在使用该版本的 OmniAuth 时遇到了类似的问题,我回到了 0.2.0 版本,所有 401 问题都不再发生。

I was having similar problems with that version of OmniAuth, I moved back to version 0.2.0 and all the 401's stopped happening.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文