我正在我的Rails应用程序中尝试从Google中获得一个访问令牌,作为设置raketask的总体目标的一部分。我可以得到一个Auth代码罚款,但当我提出一个post请求获得一个访问令牌,我得到一个302错误。我将首先描述我的当前代码,然后列出到目前为止我如何尝试解决这个问题。
当前代码:
#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请求:
#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'”的消息。
到目前为止,我尝试解决这个问题的方法如下:
我试过包括
http.use_ssl = true
http.ssl_version = :SSLv3这将返回错误"SSL_connect returned=1 errno=0 state=SSLv3 read server hello A:错误的版本号“。
我可以猜测这意味着什么,但我仍然不确定实际问题是什么,以及如何解决问题。在谷歌上搜索错误信息并不能起到帮助作用。
我也尝试过其他各种零碎的东西,但都没有用。以上的解决方案就是我一直在重复的策略。首先,我在寻找我的代码中的错误所在的答案,以及修复它的最佳途径是什么(如果我的任何尝试解决方案都是正确的,哪一种?)
感谢您抽出时间来阅读和回答!
(从一个完整的侧面来看,最后三个列表项应该是2、3、4,但是堆栈溢出文本编辑器认为它比我更清楚.)
发布于 2014-04-25 21:07:31
https://stackoverflow.com/questions/23298463
复制相似问题