Vue3/Javascript:Google 张 Api - 403 Forbidden/PERMISSION_DENIED

Vue3/Javascript: Google Sheets Api - 403 Forbidden/PERMISSION_DENIED

我在 google 云控制台中创建了一个密钥。我什至尝试重新制作并使用新的。

我正在尝试这样使用它:

export const getSheet= async () => {
      try {
          const sheetId ='xxxxxxx'
          const tabName = 'myTab'
          const accountKey = 'xxxxxxx'
          const url =' https://sheets.googleapis.com/v4/spreadsheets/'+ sheetId +'/values/'+tabName+'?key='+ accountKey
          console.log(url)
          const response = await fetch(url);
        console.log(response);
        return '';
      } catch (error) {
        console.log(error);
      } finally {
        console.log('finally');
      }
    };

正在发送的请求是:

https://sheets.googleapis.com/v4/spreadsheets/xxxxxxx/values/myTab?key=xxxxxxx

无论我做什么我都会得到

error: {code: 403, message: "The caller does not have permission", status: "PERMISSION_DENIED"}

我参考了这些关于相同问题的堆栈溢出帖子,但没有成功

  1. Error 403 on Google Sheets API
  2. Google Sheets API V4 403 Error

有没有人遇到过这个问题并能够解决它?

谢谢 -咖啡

您不能使用 API 密钥访问(Google Workplace)用户数据,例如 sheets;如果 sheet 是 public(拥有 link 的任何人),您可能(!?)仅使用 API 密钥就可以逃脱。

这些选项确实令人困惑,但是:

  • API 密钥验证应用程序
  • OAuth 用于对用户进行身份验证

看看authentication & authorization and OAuth for client-side web apps

您可以通过 Javascript Quickstart guide for Sheets API 查看 OAuth 设置。您可以使用类似于提供的 URL 参考中的示例脚本的 Spreadsheet.values.get 方法访问 sheet。

async function listMajors() {
        let response;
        try {
          // Fetch first 10 files
          response = await gapi.client.sheets.spreadsheets.values.get({
            spreadsheetId: 'SHEETID',
            range: 'SHEETRANGE',
          });
        } catch (err) {
          document.getElementById('content').innerText = err.message;
          return;
        }
        const range = response.result;
        if (!range || !range.values || range.values.length == 0) {
          document.getElementById('content').innerText = 'No values found.';
          return;
        }

就像 DazWilkin 提供的一样。确保您的应用符合 Google's OAuth2 policies.

您还可以先在浏览器上测试您的请求 url,看看它是否 returns 是 sheet 数据的 JSON 响应。在 public sheet 上测试了这种 https://sheets.googleapis.com/v4/spreadsheets/xxxxxxx/values/myTab?key=xxxxxxx 格式,只要设置为 'Anyone with the link'

,它就会返回 sheet 数据