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"}
我参考了这些关于相同问题的堆栈溢出帖子,但没有成功
- Error 403 on Google Sheets API
- 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 数据
我在 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"}
我参考了这些关于相同问题的堆栈溢出帖子,但没有成功
- Error 403 on Google Sheets API
- 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'