为什么Google Oauth在我的Rails应用程序中返回`invalid redirect_urI`?

我将Google Oauth2添加到Rails应用程序中,但是一直未能超越早期阶段。

我已经build立了一个应用程序,并定义了客户端ID和密码。但是我得到Invalid parameter value for redirect_uri: Non-public domains not allowed: http://localhost/path/to/callback

这是什么意思? 这是因为我在本地开发环境中testing?

感谢您的任何想法。

编辑

这可能是因为应用程序的URI与发送URI不同。 但是,当我去Google,并尝试授权我的开发应用程序的path,我得到的OAuth2 redirect is invalid 。 这是使用本地托pipe的应用程序的限制吗?

编辑2

我正在生成的请求如下所示:

 https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=###########&redirect_uri=http%3A%2F%2Fmyapp.dev%2Fusers%2Fauth%2Fgoogle_oauth2%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&approval_prompt=&access_type=offline 

它是否正确。 我已经试过这与client_id包括和不包括.apps.googleusercontent.com部分。 两者似乎都不起作用。

我得到了在Ubuntu上运行我的Python /龙卷风应用程序的redirect错误。 使用本地主机没有工作,因为接受的答案突出显示。 Google需要一个公共领域。

我的解决scheme是搭载“example.com”这是公共的,并在我的/ etc / hosts文件中创build一个子域。 子域名可以在我的本地开发框中运行,Google会对example.com域名感到满意。 我通过谷歌控制台注册redirect,redirect为我成功工作。

我将以下内容添加到我的/ etc / hosts中:

 192.168.33.100 devbox devbox.example.com 

在我的情况下,IP是我的机器。 我也可以用127.0.0.1来代替。

我的Google API控制台( https://code.google.com/apis/console )设置了新的客户端ID:

使用xip.io,你可以提供一个公共的URLredirect到像http://your_pow_app.192.168.0.1.xip.io/user/auth/google_oauth2/callback

testing和工作。

我用我的公共主机名。 如果你有一个静态的IP地址,这将有所帮助。 我用http://www.displaymyhostname.com/来获取我的主机名。; 当我创build新的Web应用程序客户端ID时,我将其直接插入“ 授权的JavaScript起源”字段。

PS我的主机名看起来像这样:111.111.111.111.static.exetel.com.au

这是我对相关问题的回答https://stackoverflow.com/a/23517146/1320083

对于其他人的发现,我的问题是几件事情的结合。

  1. 我无法获得callback在本地机器上工作。 控制台API控制台表明这是可能的,但我无法得到它的工作。 不知道这是服务,还是我的networking/连接/防火墙/等

  2. 在API控制台中,您必须指定完整的redirectURI,而不仅仅是指向您的应用的根url。

  3. Google在此列出范围参数https://developers.google.com/gdata/faq#AuthScopes 。 看起来这个信息已经过时了,而正确的格式现在是https://www.googleapis.com/auth/plus.me,https://www.googleapis.com/auth/youtube等。也许别人可以证实这一点?;

我还有其他一些事情正在进行。 我在这里写了关于我的另一个问题的完整解释。 不幸的是我的评论被删除,而不是由版主移动,因为我张贴在错误的地方。 我现在不记得我写的所有东西。 对于其他面临类似问题的人,可以随意发表评论,也可以慢慢记忆,这样我就可以提供一些想法。

错误redirect_uri_mismatch – 当您在Google Developers Console项目中input与您的应用程序捆绑包ID不匹配的错误捆绑包ID时,可能会发生此错误。 检查您的客户端ID和包ID是否与Developers Console中显示的值匹配。

对我来说,这是build立谷歌url的function。 我在string中插入换行符,一旦我删除了换行符,url再次运行。

我面临这个问题,但发现这确实不是一个问题。 正如我的博客中所解释的,即使您在本地主机开发机器上工作,也可以使用公共redirectURI。 Google只会将授权码返回到公共URI,您可以将其剪切并粘贴到本地机器。