我正在构建一个web应用程序,需要使用Oauth2访问用户的gmail。我注册了我的应用程序,可以获得初始代码,但不知道如何获得访问令牌和刷新代码之后。
首先,用户被发送到一个安全的google页面,输入用户名/密码。之后,google会将用户重定向到如下内容:
127.0.0.1/oauth2callback吗?代码= 4/ux5gNj -_mIu4DOD_gNZdjX9E
我有下面这个方法来处理重定向。该代码与其他信息一起在post请求中发送回Google,以换取访问令牌和刷新代码。不幸的是,底部的响应是空白的。我做错了什么?我是否需要调用响应上的另一个函数来获得访问令牌?
def oauth2callback
require "uri"
require "net/http"
uri = URI.parse("https://accounts.google.com/o/oauth2/token")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(
{'code'=>params[:code],
'client_id' => CLIENT_ID,
'client_secret' => CLIENT_SECRET,
'redirect_uri' => '127.0.0.1:3000/oauth2callback',
'grant_type' => 'authorization_code'})
http.use_ssl = true
response = http.request(request)
#response.body() is blank
end
您的重定向uri必须与用户重定向到的uri完全匹配。在您的情况下,这是127.0.0.1/oauth2callback
没有:3000
。
然而,我相信,对于谷歌这两个uri不需要是相同的,但至少在开发者控制台定义,所以也许你可以尝试添加127.0.0.1:3000/oauth2callback
到你的开发者控制台。