您好Stackoverflow社区,我对Meteor的谷歌登录有疑问。
登录流程在localhost中完全正常,但不在部署中。
我在Meteor的控制台上收到以下错误:
Exception while invoking method 'login' Error: Failed to complete OAuth handshake with Google. failed [400] { "error" : "redirect_uri_mismatch" }
at getTokens (packages/google/google_server.js:59:1)
at Object.ServiceConfiguration.configurations.findOne.service [as handleOauthRequest] (packages/google/google_server.js:10:1)
at OAuth._requestHandlers.(anonymous function) (packages/oauth2/oauth2_server.js:8:1)
at middleware (packages/oauth/oauth_server.js:173:1)
at packages/oauth/oauth_server.js:146:1
这是我的故障排除的当前清单:
1.-使用loginStyle'popup'
在db.meteor_accounts_loginServiceConfiguration上更正客户端ID和客户端密码 当弹出窗口打开时,2.- redirect_uri设置为正确的端点(http://example.com/_oauth/google)。
3.-重定向uri授权应用程序在谷歌控制台上的重定向
我的一个观察是,如果将loginStyle改为重定向而不是弹出,在google oauth重定向到我的redirect_uri之后,我的redirect_uri再次重定向到localhost而不是经典的* / _ oauth / google窗口(登录已完成。点击此处关闭此窗口。)
EDIT 出现的另一个错误是:
Error in OAuth Server: redirectUrl (http://example.com/users) is not on the same host as the app (http://localhost:80/)
所以应用程序拒绝redirectUrl(该域有一条A记录到我的amazon ec2实例的弹性IP),我只在端口80上运行以进行测试
答案 0 :(得分:1)
检查环境变量$ ROOT_URL的设置。如果未正确设置,这可能会影响预期的重定向URL。
我使用google oauth弹出窗口并在我的授权重定向URI中使用此字符串:
http://example.org
http://example.org/_oauth/google?close
编辑:
即使我将ROOT_URL设置为环境变量,Meteor也不会使用我的ROOT_URL。
解决方案正在运行流星:
$ ROOT_URL='https://example.org' meteor