如何从Google登录中调试服务器端“ redirect_uri_mismatch”错误

时间:2019-07-01 00:23:32

标签: google-cloud-functions google-signin google-api-nodejs-client

我正在尝试按照Google针对Google Sign-In for server-side apps的文档使用带有Firebase功能的Google登录,但是我遇到了redirect_uri_mismatch错误(与该文档中的示例不同,我是使用Google's nodejs SDK)。

我要遵循的一般流程是使用Google的javascript SDK向用户请求offlineAccessCode(),将访问代码发送到服务器(firebase函数),使用访问代码获取访问令牌,然后刷新令牌,并保存刷新令牌以供以后使用(这是文档中概述的流程)。

似乎redirect_uri_mismatch一词的含义是不言自明的,但是,如链接文档中所述,The Authorized redirect URI field does not require a value. Redirect URIs are not used with JavaScript APIs.该行来自部分的“步骤1:创建客户端ID和客户端密码” ,并说明了如何配置OAuth客户端凭据。这是文档中唯一提到重定向uri的情况,并且没有迹象表明当服务器使用授权代码获取访问令牌时需要重定向URI。

实际上,在使用从客户端获取的访问代码的云功能的上下文中,重定向uri的概念似乎没有意义。如果服务器需要提供匹配的redirect_uri作为javascript客户端(似乎没有在任何地方指定),则不确定javascript客户端使用的redirect_uri

因此在这样的背景下,没有人知道如何解决此redirect_uri_mismatch错误吗?

或更笼统地说,有关实现此身份验证流程的任何指针(我的云函数是使用google nodejs sdk用JavaScript编写的)。我发现很难调试此问题。

更新

我意识到错误消息显示redirect_uri_mismatch的原因是因为我一直在测试各种值为redirect_uri的值。当我从请求中删除(可选)redirect_uri参数时,来自Google服务器的响应为invalid_request: Missing parameter redirect_uri。所以google明确表示它想要一个重定向URI,即使文档似乎暗示此身份验证流程不是必需的。作为一个更大的问题,该文档似乎并未描述如何在单页面应用上为身份验证流设置重定向URI。

1 个答案:

答案 0 :(得分:0)

啊哈!答案(如this other S.O. answer所示)是将服务器上的GetLastError()设置为redirect_uri(在我的情况下是firebase函数)。我不知道这个答案来自哪里(即我在文档中找不到它),但是它有效。