我正在使用google身份验证,但不断发现原因不匹配。我正在使用的项目具有由用户生成的子域。例如,可以有:
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);
});
});
}
});
答案 0 :(得分:4)
万岁可以获得有用但不必要的解决方法(感谢您将自己复杂化为Google的一角)....
我使用javascript api打开文件选择器,检索文件信息/网址,然后使用curl将其下载到我的服务器。一旦我终于意识到我的所有通配域都必须注册,我就会中风。
我现在做的是以下内容(这是我的用例,根据需要为您提供服务)
在您所在的页面上,创建一个onclick事件以在特定域(https://googledrive.example.com/oauth/index.php?unique_token={some unique token}
)中打开一个新窗口。
在新的弹出窗口中,我完成了所有的谷歌驱动器身份验证,点击了一个按钮打开了文件选择器,然后至少从文件中检索了我需要的元数据。然后我在我的数据库(MySQL)中存储了令牌(主键),access_token,downloadurl和文件名。
回到第一步的页面,我创建了一个setTimeout()循环,它将每秒运行一次ajax调用,使用相同的unique_token来检查它何时被输入数据库。一旦找到它,我就会杀死循环,然后检索内容并按照我的意愿进行操作(在这种情况下,我通过使用curl获取文件的单独上传脚本上传它们)。
这显然不是处理此问题的最佳方法,但它比将每个子域名输入googles云控制台更好。我打赌你可以用他们使用的googles服务器端oauth库来做这件事,但是我的用例有点复杂而且我是胡思乱想因为我在过去的4天里感到很沮丧,我花了与谷歌的一个愚蠢的小整合。 / p>
答案 1 :(得分:0)
不支持通配符源,重定向URI也是如此。
您可以注册通配符来源是一个错误。
你可以使用state参数,但要非常小心,确保你没有创建一个开放的重定向器(一个可以重定向到任意URL的端点)。