[英]“The caller does not have permission - google-apps-script”
我正在嘗試使用 google-apps-script 創建對 google 教室的擴展,但我似乎遇到了權限問題——“調用者沒有權限”。 有人可以告訴我為什么會這樣以及我需要做什么
我已經嘗試訪問谷歌雲平台提供的所有庫,希望其中一個提供所需的權限,但無濟於事。
function listCourses() {
var optionalArgs = {
pageSize: 10
};
var response = Classroom.Courses.list(optionalArgs);
var courses = response.courses;
if (courses && courses.length > 0) {
for (i = 0; i < courses.length; i++) {
var course = courses[i];
Logger.log('%s (%s)', course.name, course.id);
var submissions = Classroom.Courses.CourseWork.list(course.id, optionalArgs);
for (i = 0; i < submissions.length; i++) {
var submission = submissions[i];
Logger.log('%s', submission);
}
}
} else {
Logger.log('No courses found.');
}
}
該代碼旨在列出特定 class 中課程的課程 ID
該解決方案涉及做兩件事 -
appsscript.json
)Code.gs
文件appsscript.json
)此任務的相應教室 API 參考在這里。
看起來即使在啟用高級 Google 服務之后... ,您也只會添加以下 OAuth 范圍 -
您可以通過導航到File > Project properties > Scopes來查看這些內容。
但是,當您從文檔鏈接嘗試 API 時,在Credentials > Google OAuth 2.0選項卡下,它顯示另外 4 個完全不同的 OAuth 范圍; 這些如下 -
您需要在您的 Apps 腳本清單文件中手動添加所有 8 個。 為此,請導航至查看並檢查顯示清單文件。 您需要在此處添加此代碼,可能在依賴項下方 -
"oauthScopes": [
"https://www.googleapis.com/auth/classroom.courses",
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
"https://www.googleapis.com/auth/classroom.profile.emails",
"https://www.googleapis.com/auth/classroom.profile.photos",
"https://www.googleapis.com/auth/classroom.rosters",
"https://www.googleapis.com/auth/classroom.coursework.me",
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
"https://www.googleapis.com/auth/classroom.coursework.students",
"https://www.googleapis.com/auth/classroom.coursework.students.readonly"
],
注意 1:僅添加較新的 4 不會起作用,因為腳本只會假定這些,而不是在腳本第一次運行時自動填充的原始 5。
注意2:空白行只是為了區分自動生成的范圍與您需要手動添加的范圍(它是多余的)。
我的appsscript.json
文件看起來像這樣; 你的可能不同 -
{
"timeZone": "Asia/Kolkata",
"dependencies": {
"enabledAdvancedServices": [{
"userSymbol": "Classroom",
"serviceId": "classroom",
"version": "v1"
}]
},
"oauthScopes": [
"https://www.googleapis.com/auth/classroom.courses",
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
"https://www.googleapis.com/auth/classroom.profile.emails",
"https://www.googleapis.com/auth/classroom.profile.photos",
"https://www.googleapis.com/auth/classroom.rosters",
"https://www.googleapis.com/auth/classroom.coursework.me",
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
"https://www.googleapis.com/auth/classroom.coursework.students",
"https://www.googleapis.com/auth/classroom.coursework.students.readonly"
],
"exceptionLogging": "STACKDRIVER"
}
Code.gs
文件一旦你擁有了正確的權限,你就可以自由地使用實際的代碼——你最初共享的那個缺少一些組件,我已經修改了它以使它在這里工作——
function listCourses() {
var optionalArgs = {
pageSize: 10
};
var response = Classroom.Courses.list(optionalArgs);
var courses = response.courses;
if (courses && courses.length > 0) {
for (var i = 0; i < courses.length; i++) {
var course = courses[i];
Logger.log('%s (%s)', course.name, course.id);
var submissions = Classroom.Courses.CourseWork.list(course.id, optionalArgs);
for (var j = 0; j < submissions.courseWork.length; j++) {
var submission = submissions.courseWork[j];
Logger.log('%s', submission);
}
}
} else {
Logger.log('No courses found.');
}
}
希望這會有所幫助:) 但我實際上並不知道為什么這些范圍不會自動添加,也許會為此向 Google 提出問題。
編輯說明:糾正語法錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.