【发布时间】:2019-12-18 18:30:48
【问题描述】:
我们的供应商维护着一个 Google 表格,我们正尝试在我们的网站上添加一个表单,以访问该表格并从中提取数据。非常简单的任务,但我们在使用 OAuth 时遇到了问题。该工作表不公开,仅与某些人(包括我的 Google ID)共享。
现在,我使用 Google Developer Console 来设置 Googlesheets API 库。我在这里添加了一个简单的表单:https://alcocovers.com/knowledge-base/track-your-order/。当我第一次使用该表格时,我点击了“登录”按钮(当前隐藏),它在弹出窗口中向我显示了同意书,我使用我的 Google ID 登录并询问“alcocovers.com 想要访问我的个人资料信息”,我提供了访问权限。表格开始工作,我可以从表格中提取信息并显示在我们的网页上。
但问题是,我为链接网站以访问我的 Google 帐户(和 Google 表格)所做的身份验证并不适用于所有人。如果我在隐身模式下使用表单,它无法访问工作表,这意味着使用该表单的每个人都必须给予同意。这没有任何意义,因为我认为当我第一次登录并允许网站访问我的帐户和工作表时,它对每个人都有效。是网站而不是个人用户进行访问。我们希望我们网站的用户能够使用表单并从工作表中提取数据。我怎样才能做到这一点?
下面是我用来初始化和验证客户端的代码。此代码是从 Google Sheet API 文档中复制粘贴的。我假设这需要更改,因此 OAuth 仅发生一次,已经完成将站点链接到工作表以及将来使用表单时,不需要同意。
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 密钥,只是更改了 CLIENT ID。
【问题讨论】:
标签: javascript browser google-sheets-api