在https://code.google.com/apis/console网站上,我已经注册了我的应用程序,设置生成的客户端ID:和客户端秘密到我的应用程序,并尝试登录谷歌。 不幸的是,我收到了错误信息:

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

这条信息是什么意思,我该如何修复它? 我使用宝石omniauth-google-oauth2。


当前回答

在我的情况下,它是www和非www URL。实际网站有www URL和谷歌开发控制台授权重定向uri有非www URL。因此,重定向URI存在不匹配。我通过将谷歌开发人员控制台中的授权重定向uri更新为www URL解决了这个问题。

其他常见的URI不匹配有:

在授权重定向uri中使用http://和https://作为实际URL,反之亦然 在授权重定向uri中使用尾随斜杠(http://example.com/),而不使用尾随斜杠(http://example.com)作为实际URL,反之亦然

下面是谷歌开发人员控制台的逐步截图,这样对于那些很难找到开发人员控制台页面来更新重定向uri的人是有帮助的。

访问https://console.developers.google.com 选择您的项目

点击菜单图标

单击API管理器菜单

点击凭证菜单。在OAuth 2.0客户端id下,您将找到您的客户端名称。在我的例子中,它是Web客户机1。点击它,一个弹出窗口将出现,你可以编辑授权Javascript源和授权重定向uri。

注意:默认情况下,授权URI包括所有本地主机链接,任何活动版本都需要包括完整路径,而不仅仅是域,例如https://example.com/path/to/oauth/url

下面是谷歌关于创建项目和客户端ID的文章。

其他回答

Let me complete @Bazyl's answer: in the message I received, they mentioned the URI "http://localhost:8080/" (which of course, seems an internal google configuration). I changed the authorized URI for that one, "http://localhost:8080/" , and the message didn't appear anymore... And the video got uploaded... The APIS documentation is VERY lame... Every time I have something working with google apis, I simply feel "lucky", but there's a lack of good documentation about it.... :( Yes, I got it working, but I don't yet understand neither why it failed, nor why it worked... There was only ONE place to confirm the URI in the web, and it got copied in the client_secrets.json... I don't get if there's a THIRD place where one should write the same URI... I find nor only the documentation but also the GUI design of Google's api quite lame...

The trick is to input the right redirect url at the point of creating the ID. I found that updating the redirect url once the ID has been created via an 'Edit' just doesn't get the job done. What also worked for me is duplicating the entire 'vendor' folder and copying it to the same location where the 'oauth' file is (just until you successfully generate the token and then you can delete the duplicate 'vendor' folder). This is because trying to point to the vendor folder via '../vendor/autoload' didn't work for me.

因此,删除您现有的麻烦客户端OAuth ID,并尝试这种方法,它将工作。

在我的例子中,我的证书应用类型是“其他”。所以我无法在凭证页中找到授权重定向uri。它似乎出现在应用程序类型:“Web应用程序”。但是您可以单击Download JSON按钮来获取client_secret。json文件。

打开json文件,你可以找到这样的参数:"redirect_uri ":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]。我选择使用http://localhost,它很适合我。

确保检查协议“http://”或“https://”,因为谷歌也检查协议。 最好将两个URL都添加到列表中。

没有“一个”解决方案,这似乎很奇怪,也很烦人。 对我来说,http://localhost:8000没有成功,但http://localhost:8000/成功了。