“呼叫者没有权限-google-apps-script”

Olu*_*aga 3 permissions google-api google-apps-script google-developers-console

我正在尝试使用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.');
  }
}
Run Code Online (Sandbox Code Playgroud)

该代码旨在列出特定课程中课程的课程ID

Sou*_*ria 7

该解决方案涉及做两件事-

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

任务1

更新清单文件(appsscript.json

此处适用于此任务的Classroom API参考。

看起来即使启用了高级Google服务...,您也只会添加以下OAuth范围-

您可以通过导航到“ 文件”>“项目属性”>“范围”来查看这些内容。

但是,当您从文档链接尝试“ API”时,在“ 凭据”>“ 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"
],
Run Code Online (Sandbox Code Playgroud)

注意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"
}
Run Code Online (Sandbox Code Playgroud)

任务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.');
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助:),但我实际上不知道为什么这些范围不会自动添加,也许会给Google带来麻烦。

编辑说明:更正的语法错误