' Invalid_grant'响应通过OAuth2从reddit获取访问令牌

时间:2014-07-14 13:25:14

标签: ruby ruby-on-rails-4 oauth-2.0 reddit httparty

我可以通过reddit使用OAuth2和Rails登录我的localhost网站,但当我尝试制作后续(必需的)POST请求以获取进行实际API调用所需的访问令牌时,我得到了回复' invalid_grant '。 OAuth reddit文档(here)表示invalid_grant表示"代码已过期或已被使用"

但是我确定它没有被重复使用,我已经移动了代码,以确保它无法运行两次并监控控制台。更改POST请求中的其他值会产生401,因此请求本身就可以了(我认为)。

omniauth_callbacks_controller.rb

@result = HTTParty.post("https://ssl.reddit.com/api/v1/access_token",
  :body => { 
    :state => params[:state],
    :redirect_uri => "http://localhost:3000/users/auth/reddit/callback", 
    :code => params[:code],
    :grant_type => 'authorization_code',
  },
  :basic_auth=> { 
    username: ENV['REDDIT_KEY'], 
    password: ENV['REDDIT_SECRET']
  }
)

logger.info(@result.to_json)

我尝试的事情:

  • 四重检查我的所有reddit应用程序详细信息都是正确的,如key,secret,redirect_uri
  • 确保linux时钟与NTP同步
  • 代码结构的变化,以确保只运行一次
  • 不同的HTTP宝石
  • 无尽的迂回无效的试验和错误

如果有人有任何想法,那将会受到大力赞赏。在这一天中度过了最好的一天,并且变得有点荒谬。感谢。

1 个答案:

答案 0 :(得分:0)

好的,它正在工作。哇这令人尴尬......所以我使用的omniauth-reddit gem实际上为你获取了令牌以及授权本身 - 使用该gem只需要完整的额外步骤,因此它实际上不止一次被使用invalid_grant。

更糟糕的是,我看到了“令牌”#39;在今天早些时候的回复中,使用它测试了一个直接的API调用,但是必须以某种方式弄乱语法,因为格式不是我所期望的(还有一个'授权令牌&#39 ;以及我使用的指南中提到的访问令牌,所以假设它是前者)所以我整天都在进行一场疯狂的追逐。