Javascript 使用其他人创建的API访问googlesheet时遇到问题,该API仅共享给特定的人
我们的供应商维护一个谷歌表单,我们正在尝试在我们的网站上添加一个表单,用于访问该表单并从中提取数据。非常简单的任务,但是我们在OAuth上遇到了问题。该表不是公开的,只与某些人共享(包括我的谷歌ID) 现在,我使用GoogleDeveloper控制台来设置Googlesheets API库。我在这里添加了一个简单的表单:。当我第一次使用表单时,我点击“登录”按钮(当前隐藏),它在弹出窗口中显示同意书,我使用谷歌ID登录,它询问“alcovers.com想要访问我的个人资料信息”,我允许访问。表单开始工作,我可以从表单中提取信息并显示在我们的网页上 但问题是,我链接网站以访问我的谷歌账户(和谷歌表单)的身份验证并不适用于所有人。如果我在匿名模式下使用表单,它将无法访问表单,这意味着使用表单的每个人都必须给予同意。这没有意义,因为我认为当我第一次登录并让网站访问我的帐户和工作表时,它对每个人都有效。这是一个网站,使访问不是个人用户。我们希望我们网站的用户能够使用表单并从表单中提取数据。我怎样才能做到这一点 下面是我用来初始化和验证客户端的代码。此代码是从GoogleSheetAPI文档复制粘贴的。我假设这需要改变,所以OAuth只发生一次,这是已经完成的,将站点链接到表单,在将来使用表单时,不需要同意Javascript 使用其他人创建的API访问googlesheet时遇到问题,该API仅共享给特定的人,javascript,browser,google-sheets-api,Javascript,Browser,Google Sheets Api,我们的供应商维护一个谷歌表单,我们正在尝试在我们的网站上添加一个表单,用于访问该表单并从中提取数据。非常简单的任务,但是我们在OAuth上遇到了问题。该表不是公开的,只与某些人共享(包括我的谷歌ID) 现在,我使用GoogleDeveloper控制台来设置Googlesheets API库。我在这里添加了一个简单的表单:。当我第一次使用表单时,我点击“登录”按钮(当前隐藏),它在弹出窗口中显示同意书,我使用谷歌ID登录,它询问“alcovers.com想要访问我的个人资料信息”,我允许访问。表单
function initClient() {
var API_KEY = ''; // I added api key here
var CLIENT_ID = ''; // I added client id here
var SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';
gapi.client.init({
'apiKey': API_KEY,
'clientId': CLIENT_ID,
'scope': SCOPE,
'discoveryDocs': ['https://sheets.googleapis.com/$discovery/rest?version=v4'],
}).then(function() {
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSignInStatus);
updateSignInStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
});
}
function handleClientLoad() {
gapi.load('client:auth2', initClient);
}
function updateSignInStatus(isSignedIn) {
if (isSignedIn) {
makeApiCall();
}
}
function handleSignInClick(event) {
gapi.auth2.getAuthInstance().signIn();
}
function handleSignOutClick(event) {
gapi.auth2.getAuthInstance().signOut();
}
更新#1:
在尝试了@Jescanellas建议的解决方案之后,我发现了以下错误。注意,我保留了相同的API密钥,只更改了客户端ID。
其他用户无法使用您的凭据访问工作表。为了做到这一点,你需要使用一个。一旦您创建了它,您就可以使用您的Google帐户对API进行授权调用,方法是使用服务帐户凭据而不是您的凭据。按照文档中的步骤操作: 1-创建服务帐户和凭据
如前所述,请使用服务帐户凭据访问该工作表。非常感谢您提供的详细答案。让我跟着你的向导走。我会更新和接受,一旦一切都完成了。再次感谢。我有一个问题:是否有一个使用服务帐户凭据使用JavaScript访问工作表的示例?我找不到它。从我在不同页面上看到的情况来看,由于安全问题,服务帐户与javascript不兼容。如果我必须使用服务帐户,我需要使用php或nodejs。对吗?我不知道Javascript和服务帐户有任何安全问题。您只需将旧凭据文件更改为SA文件,就可以将其与代码一起使用。感谢您的澄清,我刚刚用浏览器控制台中看到的错误更新了我的问题。有什么想法吗?这可能是因为我没有在该项目的任何地方添加@alcovers.com G-Suite帐户吗?即使启用了“2-启用G套件域范围的委派:”也不起作用?请尝试将您的域添加到授权中。为此,创建一个Web应用程序类型ClientId并将其设置在那里。如果这不起作用,我们可以在聊天室继续对话,不扩展评论。