Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何为oauth回调配置路由_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何为oauth回调配置路由

Ruby on rails 如何为oauth回调配置路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用gem与谷歌服务进行通信。我不明白如何实现回调,它使用OAuth代码接收响应以获取访问令牌。当我在回调方法中设置断点时,它似乎从未被调用过 这是我的密码: 路线: match '/oauth2/callback' => 'reports#callback' 实际重定向的url: http://localhost/oauth2/callback?code=111111 报表控制器: def new client = OAuth2::Client.new(ENV['GA_C

我正在使用gem与谷歌服务进行通信。我不明白如何实现回调,它使用OAuth代码接收响应以获取访问令牌。当我在
回调
方法中设置断点时,它似乎从未被调用过

这是我的密码:

路线:

match '/oauth2/callback' => 'reports#callback'
实际重定向的url:

http://localhost/oauth2/callback?code=111111  
报表控制器:

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

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

你需要一个域名才能使用像OAuth这样的服务,因为谷歌服务器必须能够在互联网上找到你的计算机

要在开发机器上执行此操作,您应该:

  • 在已知DNS服务器上设置名称:最简单的方法是通过动态DNS服务器,如或

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


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

    • 在谷歌云中指定url:
      http://localhost:8080/oauth2/callback

    • 在客户端请求中指定相同的返回url


    这是有道理的,但当我将重定向url更改为
    http://SITE_NAME/oauth2/callback
    在my production env中进行测试时,不会触发回调。我确保使用我的生产客户端id和来自google api控制台的机密,以及匹配重定向url。我甚至添加了
    approval\u prompt=>'force'
    @mnort9,但在您的生产日志中却没有任何内容,比如无法路由的内容?可能会发生两件事:1)谷歌没有向你发送任何请求,或者2)它发送了一个错误的请求,并且得到了一个路由错误。我建议您也试着在生产环境中加载控制台,并手动尝试OAuth调用,看看您是否能发现一些错误。我将尽快在本地测试您的方法。我使用
    http://127.0.0.1:3000/
    作为回调url。谢谢你的帮助。如果你不介意,请看看我的另一个问题。谢谢