首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Google请求访问令牌返回302

从Google请求访问令牌返回302
EN

Stack Overflow用户
提问于 2014-04-25 16:31:38
回答 1查看 3.4K关注 0票数 1

我正在我的Rails应用程序中尝试从Google中获得一个访问令牌,作为设置raketask的总体目标的一部分。我可以得到一个Auth代码罚款,但当我提出一个post请求获得一个访问令牌,我得到一个302错误。我将首先描述我的当前代码,然后列出到目前为止我如何尝试解决这个问题。

当前代码:

代码语言:javascript
复制
#users_controller
def auth_access
client = Signet::OAuth2::Client.new(
      :authorization_uri => 'https://accounts.google.com/o/oauth2/auth',
      :token_endpoint_uri => 'https://accounts.google.com/o/oauth2/token',
      :client_id => ENV['OAUTH_CLIENT_ID'],
      :client_secret => ENV['OAUTH_CLIENT_SECRET'],
      :scope => 'https://www.googleapis.com/auth/analytics.readonly',
      :redirect_uri => 'http://localhost:3000/google/auth_callback'
    )

    redirect_to client.authorization_uri.to_s
end

到目前为止,这部分工作得很好。它重定向到同意页面,当用户同意时,它使用url参数中的auth代码将它们重定向到页面。接下来,我使用该auth代码并尝试为访问令牌向API发出POST请求:

代码语言:javascript
复制
#users_controller
def auth_callback
http = Net::HTTP.new('accounts.google.com')

    path = '/o/oauth2/token'
    data = "code=#{params['code']}&client_id=#{ENV['OAUTH_CLIENT_ID']}&client_secret=#{ENV['OAUTH_CLIENT_SECRET']}&redirect_uri=http://localhost:3000/auth_final&grant_type=authorization_code"
    response = http.post(path, data)
end

当我遇到问题的时候。Google返回302,并包含一条类似于“我们移到'https://accounts.google.com/o/oauth2/token'”的消息。

到目前为止,我尝试解决这个问题的方法如下:

  1. 我认为问题在于http.post方法调用的是http而不是https。

我试过包括

代码语言:javascript
复制
http.use_ssl = true
http.ssl_version = :SSLv3

这将返回错误"SSL_connect returned=1 errno=0 state=SSLv3 read server hello A:错误的版本号“。

我可以猜测这意味着什么,但我仍然不确定实际问题是什么,以及如何解决问题。在谷歌上搜索错误信息并不能起到帮助作用。

  1. 类似地,我尝试使用gems为我调用https,特别是HTTParty和Typheous,尽管我无法在它们方面取得任何进展(我甚至不确定这是否是http/https问题)。
  2. 我试过使用Signet-Rails宝石。这是迄今为止最有效的方法,成功地调用了API并返回了信息。但是,它要么没有保存刷新令牌,要么我找不到它被保存的位置。因为我需要访问这个令牌来运行rake任务,所以我放弃了。
  3. 我试着用Legato,不断地遇到各种各样的问题。整体而言,Legato给我的印象是,它没有将auth代码、同意和令牌集成到应用程序中,而是要求开发人员在应用程序范围之外预先设置这些代码。我希望能够将auth代码设置为应用程序的一部分。如果我正确地理解了Legato,那么它不是我需要的宝石。

我也尝试过其他各种零碎的东西,但都没有用。以上的解决方案就是我一直在重复的策略。首先,我在寻找我的代码中的错误所在的答案,以及修复它的最佳途径是什么(如果我的任何尝试解决方案都是正确的,哪一种?)

感谢您抽出时间来阅读和回答!

(从一个完整的侧面来看,最后三个列表项应该是2、3、4,但是堆栈溢出文本编辑器认为它比我更清楚.)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 21:07:31

指定端口:

代码语言:javascript
复制
http = Net::HTTP.new('accounts.google.com', 443)

来源:SSL Error on HTTP POST (Unknown Protocol)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23298463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档