3

我正在使用谷歌身份验证,但不断收到来源不匹配。我正在工作的项目具有由用户生成的子域。因此,例如可以有:

john.example.com
henry.example.com
larry.example.com

在我的应用程序设置中,我的来源之一是 http://*.example.com,但我得到了来源不匹配。有没有办法解决这个问题?顺便说一句,我的代码如下所示:

 gapi.auth.authorize({
                        client_id : 'xxxxx.apps.googleusercontent.com',
                        scope : ['https://www.googleapis.com/auth/plus.me',
state: 'http://henry.example.com', 
'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'],
                        immediate : false
                    }, function(result) {

                        if (result != null) {
                            gapi.client.load('oath2', 'v2', function() {
                                console.log(gapi.client);
                                gapi.client.oauth2.userinfo.get().execute(function(resp) {
                                    console.log(resp);
                                });
                            });




}
                });
4

2 回答 2

4

万岁有用但不必要的解决方法(感谢您让自己陷入困境谷歌)......

我使用 Google Drive 使用 javascript api 打开文件选择器,检索文件信息/url,然后使用 curl 将其下载到我的服务器。一旦我终于意识到我所有的通配符域都必须注册,我就中风了。

我现在做的是以下(这是我的用例,根据需要满足您的需求)

  1. https://googledrive.example.com/oauth/index.php?unique_token={some unique token}在您所在的页面上,创建一个 onclick 事件以在特定域 ( )中打开一个新窗口。

  2. 在新的弹出窗口中,我完成了所有的谷歌驱动器身份验证,点击了一个按钮,打开了文件选择器,然后至少从文件中检索了我需要的元数据。然后我将令牌(主键)、access_token、downloadurl 和文件名存储在我的数据库(MySQL)中。

  3. 回到第一步的页面,我创建了一个 setTimeout() 循环,该循环将使用相同的 unique_token 每秒运行一次 ajax 调用,以检查何时将其输入数据库。一旦找到它,我就终止循环,然后检索内容并按照我的意愿处理它们(在这种情况下,我通过一个单独的上传脚本上传它们,该脚本使用 curl 来获取文件)。

这显然不是处理这个问题的最佳方法,但它比将每个子域都输入谷歌云控制台要好。我敢打赌,您可能可以使用他们使用的谷歌服务器端 oauth 库来做到这一点,但我的用例有点复杂,而且我很暴躁,因为过去 4 天我与谷歌进行了一次愚蠢的小集成,这让我感到沮丧。

于 2013-10-04T22:12:34.000 回答
0

不支持通配符来源,与重定向 URI 相同。

您可以注册通配符来源的事实是一个错误。

您可以使用 state 参数,但要非常小心,确保不要创建开放式重定向器(可以重定向到任意 URL 的端点)。

于 2013-09-16T20:59:48.653 回答