在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。


当前回答

试着做这些检查:

控制台和应用程序中的Bundle ID。我更喜欢这样设置应用程序的Bundle ID: "org.peredovik.${PRODUCT_NAME:rfc1034identifier}" 检查你是否在信息选项卡添加了URL类型,只需在标识符和URL方案中输入你的Bundle ID,角色设置为编辑器 在控制台cloud.google.com“api & auth”->“同意屏幕”填写关于您的应用程序的表格。“产品名称”是必填字段。

享受:)

其他回答

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

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

在我的情况下,它是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的文章。

小心url末尾多余的/ http://localhost:8000和http://localhost:8000/不同

它已经得到了彻底的回答,但最近(比如,一个月前)谷歌停止接受我的URI,它将无法工作。事实上,我知道它以前做过,因为有一个用户注册了它。

无论如何,问题是常规400:redirect_uri_mismatch,但唯一的区别是,它是从https://更改为http://,和谷歌将不允许您注册http://重定向URI,因为它们是生产发布状态(而不是localhost)。

问题是在我的回调(我使用护照认证),我只做了

callbackURL: "/register/google/redirect"

读文档,他们用的是完整的URL,所以我改成了

callbackURL: "https://" + process.env.MY_URL+ "/register/google/redirect"

将https localhost添加到我接受的URI中,这样我就可以在本地进行测试,它又开始工作了。

TL;DR使用完整的URL,这样你就知道你要重定向到哪里

检查表:

HTTP还是https? &或&? 后面的斜杠(/)还是打开? (CMD/CTRL)+F,在证书页面中搜索精确匹配。如果 没有找到,那就去找失踪的那个。 等待谷歌刷新它。可能每半小时发生一次,如果你 经常更换,否则可能会留在池中。就我的情况而言,几乎用了半个小时才生效。