我正在使用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

在这里,token and secret插入了我的实际token and secret.当我点击@twitter_auth_url的链接时,我被带到twitter并被要求授予访问权限.我单击"允许",然后twitter将我重定向到我的回调URL 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

twitter上的请求和密码都很好.但是,我最终出现了一个授权错误:

 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])

当它试图获取访问令牌时.您可以从_request here中看到authorize_的源代码.我不知道为什么会这样.有人有 idea 吗?

推荐答案

这是我遇到的最烦人的调试问题之一.我不小心在几个地方输出,因为URL是动态的,它们碰巧没有在我的测试用例中定义(我用它来显示图表数据,现在没有足够的数据,所以google图表api URL是空白的).这导致我的浏览器在加载某些页面时向本地主机发出多个请求.不知怎么的,这使得oauth进程失败了.显然,S.O.上的人无法了解我的应用程序特定问题,所以我必须回答自己的问题.

Ruby-on-rails相关问答推荐

为什么这个rails Collection_select不呈现关联属性?

在URL中将下划线更改为连字符Ruby on Rails

Ruby Hash 中 tap / delete 和 except 的区别

如何断言 Ruby 单元测试中的错误消息?

Rails 自动加载完全大写的名称,如 API

NameError:未定义的局部变量或方法记录器

attr_accessible(*attributes) 和 attr_protected(*attributes) 有什么区别?

Rails 3 - Select 包含?

I18n 用于特定于模型的 Rails 提交按钮

如何在 Rails 上生成 AuthenticityToken

设计和强大的参数

了解 Rails 验证:allow_blank 有什么作用?

Rails 成语避免在 has_many 中重复:通过

Rails:仅当值存在时如何验证格式?

关闭 Firefox 中文本字段的自动完成功能

对象不支持此属性或方法 Rails Windows 64bit

Rails 3 返回 HTTP 406 Not Acceptable?

如何在两个字段上对 ruby​​/rails 进行排序?

Rails - 邮件,将正文作为纯文本获取

是否可以输出rake db:migrate产生的 SQL 更改脚本?