如何配置oauth回调的路由

时间:2013-05-31 19:08:34

标签: ruby-on-rails ruby

我使用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

2 个答案:

答案 0 :(得分:4)

Google服务器正在尝试访问此无效的网址http://localhost/oauth2/callback?code=111111

您需要使用域名来使用OAuth等服务,因为Google服务器必须能够通过互联网找到您的计算机。

为了能够从您的开发机器执行此操作,您应该:

  1. 在已知的DNS服务器上设置名称:最简单的方法是通过动态DNS服务器,例如dyndnsno-ip

  2. 如果您使用NAT在路由器后面,则可能需要将请求重定向到端口80上的调制解调器到您的计算机:如果您不这样做,你的调制解调器将从谷歌端口80收到一个包,并会说“不适合我”,丢弃它。您可以在调制解调器菜单中执行此操作 - 查找端口转发或NAT部分。

答案 1 :(得分:1)

传递给google的redirect_url必须与从客户端浏览器中看到的回调网址完全匹配。在url中使用localhost没问题(关于DNS和NAT的fotanus句子是错误的)。如果您在不同的端口(例如8080)中运行容器,则必须:

  • 在Google云中指定网址:http://localhost:8080/oauth2/callback

  • 在客户请求中指定相同的返回网址。