在网站https://code.google.com/apis/console我已经注册了我的应用程序,将生成的 Client ID: 和 Client Secret 设置为我的应用程序并尝试使用Google登录 . 不幸的是,我收到了错误消息:
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 .
29 回答
我需要在API和服务下创建一个新的客户端ID - >凭据 - >创建凭据 - > OAuth - >其他
然后我下载并使用client_secret.json和我上传到我的youtube帐户的命令行程序 . 我试图使用Web App OAuth客户端ID,它在浏览器中给我重定向URI错误 .
对我来说这是因为在'Authorized redirect URIs'列表中我错误地将
https://developers.google.com/oauthplayground/
而不是https://developers.google.com/oauthplayground
(最后没有/
) .当您在https://code.google.com/apis/console注册您的应用并创建客户端ID时,您有机会指定一个或多个重定向URI . auth URI上
redirect_uri
参数的值必须与其中一个完全匹配 .2015年7月15日 - 登录时使用此脚本上周正在运行的登录信息
停止工作并开始使用
Error: redirect_uri_mismatch
导致错误400在DETAILS部分:
redirect_uri=storagerelay://...
我改为:
重定向URI(返回响应的位置)必须在API控制台中注册,错误表明您没有这样做,或者没有正确完成 .
转到项目的控制台,查看API Access . 您应该在那里看到您的客户端ID和密码,以及重定向URI列表 . 如果未列出所需的URI,请单击编辑设置并将URI添加到列表中 .
编辑:(从下面评价很高的评论)请注意,更新谷歌api控制台和存在的更改可能需要一些时间 . 一般只有几分钟但有时似乎更长 .
就我而言,它是
www
和non-www
URL . 实际网站有www
网址,Google Developer Console中的 Authorized Redirect URIs 有non-www
网址 . 因此,重定向URI存在不匹配 . 我通过将Google Developer Console中的Authorized Redirect URIs
更新为www
来解决了这个问题 .其他常见的URI不匹配是:
在授权重定向URI中使用
http://
,在实际URL中使用https://
,反之亦然在授权重定向URI中使用尾部斜杠(
http://example.com/
)而不使用尾部斜杠(http://example.com
)作为实际URL,反之亦然以下是Google Developer Console的逐步截图,以便对那些难以找到开发人员控制台页面以更新重定向URI的人有所帮助 .
这是关于creating project and client ID的Google文章 .
如果您使用的是 Google+ javascript button ,那么您必须使用
postmessage
而不是实际的URI . 由于Google的文档由于某种原因没有明确说明,我花了差不多整整一天的时间来解决这个问题 .对于我的网络应用程序,我通过写作纠正了我的错
确保检查协议“http://”或“https://”作为谷歌检查协议 . 最好在列表中添加两个URL .
在您在客户端检索 authorization code 的任何流程中,例如 GoogleAuth.grantOfflineAccess() API ,现在您想将代码传递到服务器,兑换它,并存储访问和刷新令牌,那么您必须使用文字字符串
postmessage
而不是redirect_uri .例如,在Ruby doc的代码段上构建:
唯一提到
postmessage
的Google文档就是old Google+ sign-in doc . doc page for Offline Access没有提到这一点是绝对不可原谅的 . #FacePalm这似乎很奇怪,也很烦人,没有"one"解决方案 . 对我来说http://localhost:8000没有成功,但http://localhost:8000/已经解决了 .
清单:
http
或https
?&
或&
?尾部斜杠(
/
)或打开 `` ?(CMD/CTRL)+F
,在凭证页面中搜索完全匹配 . 如果没有找到,则搜索丢失的那个 .等到谷歌刷新它 . 如果您经常更换或者可能会留在游泳池中,可能会在每半个小时内发生一次 . 对我而言,生效将近半个小时 .
重定向网址区分大小写 .
在我的情况下,我添加了两个:http://localhost:5023/AuthCallback/IndexAsync http://localhost:5023/authcallback/indexasync
Rails用户(来自omniauth-google-oauth2 docs):
记住:不要包括尾随的“/”
就我而言,我的凭证申请类型是"Other" . 所以我在凭据页面找不到
Authorized redirect URIs
. 它似乎出现在应用程序类型中:"Web application" . 但是您可以单击Download JSON
按钮以获取client_secret.json
文件 .打开json文件,你可以找到如下参数:
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. 我选择使用http://localhost,它对我来说很好 .如果您使用本教程:https://developers.google.com/identity/sign-in/web/server-side-flow那么您应该使用"postmessage" .
在GO中解决了这个问题:
提防
http://localhost:8000
末尾的额外/
与http://localhost:8000/
不同让我完成@ Bazyl的回答:在我收到的消息中,他们提到了URI
"http://localhost:8080/"
(当然,这似乎是一个内部谷歌配置) . 我更改了那个的授权URI,"http://localhost:8080/"
,并且消息没有'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 1710141 , but 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相当蹩脚 . ..任何人都在努力寻找在新控制台中设置重定向网址的位置:API&Auth - >凭据 - > OAuth 2.0客户端ID - >单击链接以查找所有重定向网址
上述解决方案均不适合我 . 下面做了
将授权重定向网址更改为 - https://localhost:44377/signin-google
希望这有助于某人 .
尝试进行这些检查:
控制台和应用程序中的捆绑ID . 我更喜欢像这样设置应用程序的Bundle ID "org.peredovik.$"
检查是否在选项卡上添加了URL类型信息只需在标识符和URL方案中键入您的Bundle ID,将角色设置为Editor
在cloud.google.com的控制台"APIs & auth" - > "Consent screen"填写有关您的应用程序的表单 . "Product name"是必填字段 .
请享用 :)
在我的情况下,我必须检查Web应用程序/已安装应用程序的客户端ID类型 .
已安装的应用程序:http://localhost [重定向URI]在这种情况下,localhost只能工作
Web应用程序:您需要有效的域名[重定向URI:]
您需要做的是返回您的开发者控制台并转到API&Auth>同意屏幕并填写 . 具体来说,就是产品名称 .
不要忘记在域和ip之后包含路径 . 就我而言,我忘了:
/ oauth2callback
我在控制台中有两个请求URI,http://xxxxx/client/api/spreadsheet/authredirect和http://localhost .
我尝试了对这个问题的所有热门回复,并确认其中没有一个是我的问题 .
我从控制台中删除了localhost,在我的项目中更新了我的client_secret.json,并且不匹配错误消失了 .
我有同样的问题与谷歌登录,我正要拉我的头发!我在google开发者控制台的google Credential面板中正确输入了我的回调,这里是我的重定向网址:
https://www.example.com/signin-google
https://www.example.com/signin-google/
https://www.example.com/oauth2callback
https://www.example.com/oauth2callback/
一切似乎都没问题吧?但是直到我添加了一个 magical Url 我仍然没有工作 signin-google url(这是默认的谷歌回调) without www 并且问题解决了 .
take it into account (depending of you domain) you may or may not need to add both with and without www urls
我有前端app和后端api .
从我的后端服务器我通过点击谷歌api进行测试,并面临此错误 . 在我的整个时间里,我想知道为什么我需要给
redirect_uri
,因为这只是后端,因为它是有意义的前端 .我正在做的是从服务器给出不同的
redirect_uri
(虽然有效)(假设这只是占位符,它只是要注册到谷歌)但我创建令牌代码的前端URL是不同的 . 因此,当我在服务器端测试中传递此代码时(redirect-uri与之不同),我遇到了这个错误 .所以不要犯这个错误 . 确保您的前端
redirect_uri
与您的服务器相同,因为谷歌使用它来验证真实性 .以下是错误的原因:发生redirect_uri_mismatch问题:
在Google项目中将URL网址重定向为空白 .
重定向网址与您的网站不符
重要!它只适用于example.com,book.com等工作域(不适用于本地主机或AWS LB URL)
Recommended to use domain URL
UPDATED --> WORKING for Android apps
只需使用:
如果您处理自己的逻辑而没有Web应用程序的重定向链接