簡體   English   中英

“調用者沒有權限 - google-apps-script”

[英]“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

該解決方案涉及做兩件事 -

  1. 更新清單文件 ( appsscript.json )
  2. 更新Code.gs文件

任務1

更新清單文件 ( 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"
}

任務 2

更新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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM