我使用gem OAuth2与Google服务进行通信。我不了解如何实现回调,该回调通过OAuth代码接收响应以获取访问令牌。当我在callback
方法中设置断点时,它似乎永远不会被调用。
这是我的代码:
路线:
match '/oauth2/callback' => 'reports#callback'
实际重定向的网址:
http://localhost/oauth2/callback?code=111111
ReportsController:
def new
client = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
redirect_to client.auth_code.authorize_url({
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
:redirect_uri => 'http://localhost/oauth2/callback',
:access_type => 'offline'
})
end
def callback
oauth_code = params[:code]
# Create access token with oauth_code
end
答案 0 :(得分:4)
Google服务器正在尝试访问此无效的网址http://localhost/oauth2/callback?code=111111
。
您需要使用域名来使用OAuth等服务,因为Google服务器必须能够通过互联网找到您的计算机。
为了能够从您的开发机器执行此操作,您应该:
答案 1 :(得分:1)
传递给google的redirect_url必须与从客户端浏览器中看到的回调网址完全匹配。在url中使用localhost没问题(关于DNS和NAT的fotanus句子是错误的)。如果您在不同的端口(例如8080)中运行容器,则必须:
在Google云中指定网址:http://localhost:8080/oauth2/callback
在客户请求中指定相同的返回网址。