使用oauth和twitter ruby​​gem时,请继续获得OAuth :: Unauthorized错误

我使用ruby twitter gem和oauth来访问用户twitter账户。 在我的代码中,我有:

unless @user.twitter_authd? oauth = Twitter::OAuth.new('token', 'secret') session[:twitter_request_token] = oauth.request_token.token session[:twitter_request_secret] = oauth.request_token.secret @twitter_auth_url = oauth.request_token.authorize_url end 

在哪里令牌和秘密有我的实际令牌和秘密插入。 当我点击链接到@twitter_auth_url,我被带到twitter并要求授予访问权限。 我点击允许,然后twitterredirect到我的callbackURL http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY ,然后点击此代码:

 oauth = Twitter::OAuth.new('token', 'secret') logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}") logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}") oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret]) session[:twitter_request_token] = nil session[:twitter_request_secret] = nil @user.update_attributes({ :twitter_token => oauth.access_token.token, :twitter_secret => oauth.access_token.secret, }) redirect_to root_path 

叽叽喳喳请求令牌和秘密设置得很好。 但是,我最终的授权错误:

  OAuth::Unauthorized in MainController#twitter_callback 401 Unauthorized RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls Application Trace | Framework Trace | Full Trace /Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request' /Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token' /Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request' /Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback' 

代码在这一行失败:

 oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret]) 

当它试图获得一个访问令牌。 你可以在这里看到authorize_from_request的源代码。 我不知道为什么会发生这种情况。 任何人有想法?

晚会有点迟,但是我自己也遇到了同样的问题。 我跟踪了这​​个问题,在Twitter上设置了我的OAuth应用程序。 我最初没有指定callbackURL,因为我不确定。

一旦我安装了我的Rails应用程序,我回去findTwitter认为我是一个桌面应用程序,因为我没有指定callbackURL。 一旦我改变这个网站,并进入一个callbackURL我停止获得400。

如果您收到错误401 – OAuth :: Unauthorized,请确保您编辑您的Twitter应用程序的设置如下:

  • 应用程序types:浏览器
  • 回拨url: http : //127.0.0.1 : 3000/auth/twitter/ callback

这是一个关于你的系统与twitter服务器时间同步的问题。

Twitter不允许localhost作为有效callbackURL的一部分。

请使用http://127.0.0.1:3000/auth/twitter/callback

希望这可以帮助

这是我遇到的最烦人的debugging之一。 我偶然在一些地方输出,因为URL是dynamic的,他们碰巧没有在我的testing用例中定义(我用这个来显示图表数据,现在没有足够的权利,所以谷歌图表apiurl是空白的)。 这导致我的浏览器在加载一些页面时向本地主机发出多个请求。 不知何故,这使得oauth过程糟糕透顶。 很显然,SO上的人没有办法知道我的应用程序的具体问题,所以我不得不回答我自己的问题。

我有这个相同的问题,没有在这个线程的build议为我工作。

我发现我的问题是我的请求上的TIMESTAMP。 我正在运行我的脚本的移动设备有一个顶起来的时钟。 当我将设备上的系统时间更新到正确的时间(即现在)时,我的所有请求都返回“200 OK”而不是“401 Unauthorized”。

这个问题似乎是由于Twitter无法正确处理connection keep-alive而导致的。 确保你设置connection=close http header请求到twitter的connection=close http header 。 浪费了一个周末来debugging这个。

没有足够的信息给我,但是什么时候twitter twitter最后更新了? twitter在五月中旬改变了他们的“东西” 也许你有一个老的。 我会更新你的问题来显示callback_url,并确保你有正确的标记和秘密,它看起来像你没有。

另外,你是否把正确的callbackurl在你的twitter应用程序页面? 很多时候也把你搞砸了。

如果失败,请使用mbleighs twitter_auth 。 它为我工作,非常光滑。