繁体   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