背景/总结
我一直在广泛使用库,现在我正在设置我的权限,以便我可以将应用程序分发给一些用户进行测试。不幸的是,这是非常不可预测的。我已将问题简化如下:
我有一个简单的 webApp,它正在对融合表进行简单的 API 调用。它调用了我的 Fusion Tables Library 中的一个函数。我的 Fusion Table Library 中的函数也使用了我的 OAuth 库中的函数。从我的主要 gmail 帐户(所有资源所属的帐户)执行时,此过程运行良好。但是,我现在正在设置权限,它不适用于其他帐户。从另一个帐户执行此 webApp 时,我收到以下错误(在一种情况下除外,稍后描述):
ReferenceError:未定义“服务”。
细节和资源
我正在使用 Google 的 oAuthConfig 类,它默认我为 OAuth1.0。
权限设置如下:
网络应用
- 执行为:访问webApp的用户
- 谁有权访问:任何人
- 分享:知道链接的任何人都可以查看
融合表库
- 执行为:访问webApp的用户
- 谁有权访问:任何人
- 分享:知道链接的任何人都可以查看
OAuth 库
- 执行为:访问webApp的用户
- 谁有权访问:任何人
- 分享:知道链接的任何人都可以查看
OAuth 库项目密钥:Mnt39sDQPQvSd3QGZFFLcznt7vnFOnL
融合表库项目密钥:MigHa1npbg9PnkaJ8jFENSyUlmcxk5wr2
重现错误的简化 webApp:已发布的 webApp(代码如下)
var oAuthFields = {
'clientId' : '{...}',
'scope' : 'https://www.googleapis.com/auth/fusiontables',
'fetchUrl' : 'https://www.googleapis.com/fusiontables/v1/',
'clientSecret' : '{...}',
'fusionId' : '{...}',
'service' : 'fusiontables',
'queryUrl' : 'https://www.google.com/fusiontables/api/query'
};
function doGet() {
var app = UiApp.createApplication();
var tempVar = FTL.fusionRequest('GET', 'SHOW TABLES', oAuthFields);
Logger.log('Result: ' + tempVar);
app.add(app.createLabel('Success'));
return app;
}
例外
现在让事情变得更有趣,如果我将 OAuth 库的“共享”设置从“拥有链接的任何人都可以查看”更改为“拥有链接的任何人都可以编辑”,一切都会完美运行。我显然不想要我的图书馆的通用编辑权,所以我被困在为什么会发生这种情况,以及我需要做些什么来修复它。
我不完全清楚在使用库时如何考虑“执行为”和“共享”设置。我希望任何人都可以访问 webApp,以用户身份执行,并且我将以编程方式实现访问限制。